2016-11-14 3 views
0

Wenn eine heruntergeladene Datei hochzuladen versuchen, erhalte ich diesen Fehler S3:UnicodeDecodeError Problem beim Herunterladen von Bild und das Hochladen

# *** UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte 

Mein Verständnis ist meine Datei in Bytes ist, ich bin nicht sicher, was die endgültigen offen macht. Wie kann ich das bitte funktionieren lassen?

def download(url, file_name): 
    with open(file_name, "wb") as file: 
     response = requests.get(url) 
     file.write(response.content) 

def upload(cropped_img): 
    s3_connection = boto.connect_s3() 
    bucket = s3_connection.get_bucket(settings.AWS_S3_BUCKET_NAME) 
    key = boto.s3.key.Key(bucket, 'th/' + cropped_img) 
    with open(cropped_img) as f: 
     key.send_file(f) 
+0

Fehler in Zeile Nummer? – dnit13

+0

Full working code und full stacktrace bitte – Guillaume

+1

Wild rate: 'open (cropped_img)' muss in 'open (cropped_img, 'rb')' geändert werden, um die Datei im Binärmodus zu öffnen (standardmäßig in Python3 ist es Textmodus)) – Guillaume

Antwort

1

Sie müssen die Datei in Binär-Modus öffnen:

with open(cropped_img, 'rb') as f: 
    key.send_file(f) 

Alternativ können Sie die boto.s3.key.Key.set_contents_from_filename() Methode verwenden:

key.set_contents_from_filename(cropped_img) 
+0

Open noch funktionierte nicht einmal in rb (schlechte Anfrage), aber set_content_from_filename ist. Vielen Dank, – rix