代码之家  ›  专栏  ›  技术社区  ›  Stuart Thomson

Dropbox API-尝试上载文件

  •  1
  • Stuart Thomson  · 技术社区  · 6 年前

    我刚刚重建了Raspberry Pi,因此安装了Dropbox API的最新版本,现在我的程序无法运行。我认为这是由于这些突破性变化中的第1点: https://github.com/dropbox/dropbox-sdk-python/releases/tag/v7.1.0 .我相信这个问题( Dropbox API v2 - trying to upload file with files_upload() - throws TypeError )解决了我的问题。。。但作为一个新手,我不知道如何实际实现它——而且无论如何,我已经在使用 f.read() 。。。有人能帮忙吗?

    这是我的代码:

    def DropboxUpload(file):
        sourcefile = "/home/pi/Documents/iot_pm2/dropbox_transfer/" + filename
        targetfile = "/" + filename
        dbx = dropbox.Dropbox(cfg.dropboxtoken)
        f = open(sourcefile, "r")
        filecontents = f.read()
        try:
            dbx.files_upload(filecontents, targetfile, mode=dropbox.files.WriteMode.overwrite)
        except dropbox.exceptions.ApiError as err:
            print(err)
        f.close()
    

    这就是错误:

    Traceback (most recent call last):
      File "/home/pi/Documents/iot_pm2/dropbox_uploader.py", line 20, in <module>
        DropboxUpload(filename)
      File "/home/pi/Documents/iot_pm2/dropbox_uploader.py", line 12, in DropboxUpload
        dbx.files_upload(filecontents, targetfile, mode=dropbox.files.WriteMode.overwrite)
      File "/usr/local/lib/python3.5/dist-packages/dropbox/base.py", line 2125, in files_upload
        f,
      File "/usr/local/lib/python3.5/dist-packages/dropbox/dropbox.py", line 272, in request
        timeout=timeout)
      File "/usr/local/lib/python3.5/dist-packages/dropbox/dropbox.py", line 363, in request_json_string_with_retry
        timeout=timeout)
      File "/usr/local/lib/python3.5/dist-packages/dropbox/dropbox.py", line 407, in request_json_string
        type(request_binary))
    TypeError: expected request_binary as binary type, got <class 'str'>
    

    提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Greg    6 年前

    您需要提供 bytes ,但你提供 str

    你可以 字节数 将文件模式更改为二进制。一、 e.代替:

    f = open(sourcefile, "r")
    

    执行:

    f = open(sourcefile, "rb")