Dropbox API v2 - 尝试使用 files_upload() 上传文件 - 抛出 TypeError

Dropbox API v2 - trying to upload file with files_upload() - throws TypeError

我一直在尝试使用 python3

中的 files_upload() 函数将一个简单的文件上传到保管箱

即使尝试 tutorial provided on Dropbox's site 中的代码,我也会收到错误消息,我不明白为什么。我在这里错过了什么?

这是我的代码:

import dropbox

dbx = dropbox.Dropbox("my_access_token")

data = "asd"

dbx.files_upload(data, '/file.txt')

这是我尝试 运行 时收到的错误消息:

Traceback (most recent call last):
  File "dbox.py", line 7, in <module>
    dbx.files_upload(data, '/file.txt')
  File "/usr/local/lib/python3.4/dist-packages/dropbox/base.py", line 1225, in files_upload
    f,
  File "/usr/local/lib/python3.4/dist-packages/dropbox/dropbox.py", line 249, in request
    timeout=timeout)
  File "/usr/local/lib/python3.4/dist-packages/dropbox/dropbox.py", line 341, in request_json_string_with_retry
    timeout=timeout)
  File "/usr/local/lib/python3.4/dist-packages/dropbox/dropbox.py", line 385, in request_json_string
    type(request_binary))
TypeError: expected request_binary as binary type, got <class 'str'>

我试过不同的方法:

1.

with open("/home/pi/Desktop/dbox/asd.txt", "rb") as f:
    dbx.files_upload(f, '/asd.txt', mute = True)

2.

dbx.files_upload("hello", "")

3.

dbx.files_upload("hello", "/")

但我每次都得到同样的错误。

来自 this documentation, it appears that the first argument to files_upload() needs to be a bytes 对象。这意味着您接近了:

with open("/home/pi/Desktop/dbox/asd.txt", "rb") as f:
    dbx.files_upload(f, '/asd.txt', mute = True)

试试这个(f.read() returns 一个 bytes 对象):

with open("/home/pi/Desktop/dbox/asd.txt", "rb") as f:
    dbx.files_upload(f.read(), '/asd.txt', mute = True)

您也可以尝试传递 data.encode(whatever_encoding) 而不是只传递 data。我不确定为什么您链接的教程中没有提到这一点。