2016-09-04 4 views
2

Я пытаюсь загрузить файлы в backblaze через API с помощью python.Загрузка изображений в backblaze через API с помощью python

Ниже приведен фрагмент кода, который я использовал.

import json 
import urllib2 
import hashlib 

upload_url = "" # Provided by b2_get_upload_url 
upload_authorization_token = "" # Provided by b2_get_upload_url 
file_data = "Now, I am become Death, the destroyer of worlds." 
file_name = "oppenheimer_says.txt" 
content_type = "text/plain" 
sha1_of_file_data = hashlib.sha1(file_data).hexdigest() 

headers = { 
    'Authorization' : upload_authorization_token, 
    'X-Bz-File-Name' : file_name, 
    'Content-Type' : content_type, 
    'X-Bz-Content-Sha1' : sha1_of_file_data 
} 
request = urllib2.Request(upload_url, file_data, headers) 

response = urllib2.urlopen(request) 
response_data = json.loads(response.read()) 
response.close() 

Он отлично работает и имеет доступ к файлу через веб-интерфейс.

Но когда я пытался загрузить изображение, изменяя код, как указано ниже (Все остальные части такие же, как и выше кода)

with open('test.jpg', 'rb') as content_file: 
    file_data = content_file.read() 
file_name = "test.jpg" 
content_type = "b2/x-auto" 

он выдает ошибку, как указано ниже

File "/usr/lib/python2.7/httplib.py", line 848, in _send_output 
msg += message_body 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0:  ordinal not in range(128) 

Он отлично работал, когда я base64 закодировал контент изображения, но изображение недоступно по общедоступной ссылке. Есть ли другой способ преодолеть это?

+0

попробуйте использовать библиотеку кодеков. 'import codecs', затем измените' с open ('test.jpg', 'rb') как .. 'на' с codecs.open ('test.jpg', 'rb', encoding = 'utf-8') ' – n1c9

+0

@ n1c9 Когда я попытался, у него появилась еще одна ошибка:' UnicodeDecodeError: 'utf8' кодек не может декодировать байт 0xff в позиции 0: недействительный стартовый байт' – midhun

ответ

0

Я просто решил эту проблему с помощью requests,

response = requests.post(upload_url, headers=headers, data=file_data)