2016-12-22 27 views
5

I zostały próbuje załadować prosty plik na Dropbox za pomocą funkcji files_upload() w python3Dropbox API v2 - próbuje przesłać plik z files_upload() - rzuca TypeError

Nawet starając się kod w tutorial provided on Dropbox's site I dostaję błąd i nie rozumiem dlaczego. Czego tu mi brakuje?

Oto mój kod:

import dropbox 

dbx = dropbox.Dropbox("my_access_token") 

data = "asd" 

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

I tu jest komunikat o błędzie pojawia się przy próbie uruchomienia go:

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'> 

ja próbowałem na różne sposoby :

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", "/") 

ale mam ten sam błąd za każdym razem.

Odpowiedz

10

Z dokumentacji this wynika, że ​​pierwszym argumentem dla files_upload() musi być obiekt bytes. Co oznacza, że ​​zbliżył się:

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

Spróbuj zamiast (f.read() Zwraca bytes Object):

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

Można również spróbować przechodząc data.encode(whatever_encoding) zamiast tylko data. Nie wiem, dlaczego nie wspomniano o tym w tutorialu, który łączyłeś.

+1

Dzięki! działa idealnie z ** f.read() ** – gasparrobi