从Python脚本上传文件到我的Dropbox
我想要从我的Python脚本自动上传一个文件到我的Dropbox账户。可是我找不到只用用户名和密码的方法。看到的Dropbox开发工具包里的内容都是跟应用程序需要用户互动有关的。我只是想做一些简单的事情,比如这样:
https://api-content.dropbox.com/1/files_put//?user=me&pass=blah
10 个回答
要使用Dropbox的API,唯一的方法就是通过OAuth来验证身份。这意味着用户需要给你的应用程序授权。Dropbox不允许第三方应用处理用户的账号和密码。
如果你只是想为自己的账号使用,可以很简单地为自己的账号获取一个OAuth令牌,然后直接使用它。具体步骤可以参考这个链接:https://www.dropbox.com/developers/blog/94/generate-an-access-token-for-your-own-account。
如果是为了其他用户,他们需要通过浏览器授权你的应用一次,这样你才能获得OAuth令牌。一旦你有了这个令牌,就可以一直使用它,所以每个用户只需要做一次授权。
这段代码是用来处理某些数据的。它可能涉及到一些循环、条件判断或者函数调用,具体的内容需要根据上下文来理解。简单来说,代码的目的是为了让计算机按照我们设定的规则来处理信息。
如果你对代码的具体功能有疑问,可以尝试逐行分析,看看每一行代码在做什么,或者查找相关的资料来帮助理解。
记住,编程就像是给计算机下指令,越清晰的指令,计算机就能越准确地执行。
import dropbox
access_token = '************************'
file_from = 'index.jpeg' //local file path
file_to = '/Siva/index.jpeg' // dropbox path
def upload_file(file_from, file_to):
dbx = dropbox.Dropbox(access_token)
f = open(file_from, 'rb')
dbx.files_upload(f.read(), file_to)
upload_file(file_from,file_to)
这是我使用API v2(和Python 3)的方法。我想上传一个文件,并为它创建一个分享链接,这样我就可以把链接发给用户。这个方法是基于sparkandshine的示例。需要注意的是,我觉得现在的API文档有一个小错误,而sparkandshine已经纠正了这个错误。
import pathlib
import dropbox
import re
# the source file
folder = pathlib.Path(".") # located in this folder
filename = "test.txt" # file name
filepath = folder / filename # path object, defining the file
# target location in Dropbox
target = "/Temp/" # the target folder
targetfile = target + filename # the target path and file name
# Create a dropbox object using an API v2 key
d = dropbox.Dropbox(your_api_access_token)
# open the file and upload it
with filepath.open("rb") as f:
# upload gives you metadata about the file
# we want to overwite any previous version of the file
meta = d.files_upload(f.read(), targetfile, mode=dropbox.files.WriteMode("overwrite"))
# create a shared link
link = d.sharing_create_shared_link(targetfile)
# url which can be shared
url = link.url
# link which directly downloads by replacing ?dl=0 with ?dl=1
dl_url = re.sub(r"\?dl\=0", "?dl=1", url)
print (dl_url)
Christina的回答是基于Dropbox的APP v1,这个版本现在已经不再使用,并且会在2017年6月28日关闭。(想了解更多信息,可以参考这里。)
Dropbox在2015年11月推出了APP v2,这个新版本更简单、更一致,也更全面。
下面是使用APP v2的源代码。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import dropbox
class TransferData:
def __init__(self, access_token):
self.access_token = access_token
def upload_file(self, file_from, file_to):
"""upload a file to Dropbox using API v2
"""
dbx = dropbox.Dropbox(self.access_token)
with open(file_from, 'rb') as f:
dbx.files_upload(f.read(), file_to)
def main():
access_token = '******'
transferData = TransferData(access_token)
file_from = 'test.txt'
file_to = '/test_dropbox/test.txt' # The full path to upload the file to, including the file name
# API v2
transferData.upload_file(file_from, file_to)
if __name__ == '__main__':
main()
这个源代码托管在GitHub上,您可以在这里找到。
重要提示:这个回答已经过时,因为Dropbox现在使用的是v2 API。
请查看@SparkAndShine的回答,了解当前API版本的解决方案。
感谢@smarx提供的上述回答!我只是想为其他尝试这样做的人澄清一下。
首先,确保你安装了Dropbox模块,使用命令
pip install dropbox
。在你的Dropbox账户下,在“应用控制台”创建一个应用。(https://www.dropbox.com/developers/apps)
顺便说一下,我创建我的应用时选择了以下内容:
a. 应用类型选择“Dropbox API APP”。
b. 数据访问类型选择“文件和数据存储”。
c. 文件夹访问选择“我的应用需要访问已经在Dropbox上的文件”。(也就是说,权限类型选择“完全访问Dropbox”。)
然后点击“生成访问令牌”按钮,把生成的令牌复制粘贴到下面的Python示例中,替换掉
<auth_token>
:
import dropbox
client = dropbox.client.DropboxClient(<auth_token>)
print '链接的账户: ', client.account_info()
f = open('working-draft.txt', 'rb')
response = client.put_file('/magnum-opus.txt', f)
print '上传成功: ', response
folder_metadata = client.metadata('/')
print '文件夹信息: ', folder_metadata
f, metadata = client.get_file_and_metadata('/magnum-opus.txt')
out = open('magnum-opus.txt', 'wb')
out.write(f.read())
out.close()
print metadata