我正在尝试使用Dropbox作为用户共享文件的媒介来设置应用。
我能够使用App令牌上传文件,但是当我尝试使用授权代码时,文件不会上传;该应用程序不会报告错误。
下面的代码包含两种方法:
dbx = get_dbx_with_token()
可以,但是
dbx = get_dbx_with_auth_code()
没有。任何帮助表示赞赏。
import webbrowser
from dropbox import Dropbox
from dropbox.files import WriteMode
from dropbox import DropboxOAuth2FlowNoRedirect
APP_KEY = '<my app key>'
APP_SECRET = '<my app secret>'
APP_TOKEN = '<my app token>'
def upload(dbx):
local_file = '<path to local file>'
remote_file = '<remote file name>'
with open(local_file, 'rb') as f_upload:
try:
foo = dbx.files_upload(f_upload.read(), remote_file,
mode=WriteMode('overwrite'))
print('done ...', foo)
except:
print('Upload error')
def get_dbx_with_auth_code():
auth_flow = DropboxOAuth2FlowNoRedirect(APP_KEY, APP_SECRET)
authorize_url = auth_flow.start()
webbrowser.open(authorize_url)
auth_code = input('Authorization code: ').strip()
try:
oauth_result = auth_flow.finish(auth_code)
except:
print('Token error')
return None
dbx = Dropbox(oauth_result.access_token)
return dbx
def get_dbx_with_token():
dbx = Dropbox(APP_TOKEN)
return dbx
if __name__ == '__main__':
dbx = get_dbx_with_token()
#dbx = get_dbx_with_auth_code()
upload(dbx)
dbx.files_upload函数(foo)返回:
FileMetadata(
name='uploaded.txt',
id='id:<my_id>',
client_modified=datetime.datetime(2018, 12, 13, 18, 24, 15),
server_modified=datetime.datetime(2018, 12, 13, 18, 24, 15),
rev='013000000010ede3870', size=6, path_lower='/upload test/uploaded.txt',
path_display='/upload test/uploaded.txt',
parent_shared_folder_id=None,
media_info=None,
symlink_info=None,
sharing_info=None,
property_groups=None,
has_explicit_shared_members=None, content_hash='<content hash>')
get_dbx_with_token的FileMetadata不同:
parent_shared_folder_id='1234567890',
sharing_info=FileSharingInfo(read_only=False,
parent_shared_folder_id='1234567890',
modified_by='dbid:AAAyXwp1wvSzPzmqzCJ9SWFuxhc')
(顺便说一下,我上传到的文件夹是属于另一个用户的共享文件夹)
我认为它不起作用的原因是,如果我使用get_dbx_with_auth_code(),它不会出现在(浏览器)Dropbox文件夹中,但是如果我使用get_dbx_with_token(),它不会出现。
答案 0 :(得分:0)
由于Greg的评论,我意识到实际上是在进行上传,但是由于我对API的了解有限,所以我没有意识到使用auth_code选项将文件放置在应用程序的特定文件夹中。既然我知道在哪里寻找就可以了。
输出表明文件已成功上传,因此听起来好像您在Dropbox网站上查找文件时在其他文件夹或帐户中一样。仔细检查您要查找的帐户/文件夹。此外,您可能在两个流程之间使用了不同的应用程序,因此请注意,如果某个应用程序具有“应用程序文件夹”权限,它将上传到特殊的“应用程序文件夹”中为应用程序制作的,默认情况下在“ / Apps”中
打印files_upload
的输出显示了正在发生的事情。