2016-08-05 25 views
0

I S3 Dateispeicher durch django-Speicher Boto Speicher auf Python bin mit 3. Wenn ich versuche, eine Datei zu laden, bekomme ich diesen Fehler:Django Storages Boto Bad Digest

boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>BadDigest</Code> 
<Message>The Content-MD5 you specified did not match what we received.</Message> 
... 

Die Datei Ich versuche, Zum Speichern wird eine Datei mit Anforderungen heruntergeladen. Das Wesentliche davon ist:

import requests 
from django.core.files.base import ContentFile 

response = requests.get("http://example.com/some_file.pdf") 
document_contents = ContentFile(response.text) 
my_model.save("filename", document_contents) 

Was mache ich falsch?

Antwort

0

dieses relevant Boto Problem Siehe: https://github.com/boto/boto/issues/2868

Boto hat einige Probleme mit String-Kodierungen in Python3. Wenn Sie die Codierung wissen, verwenden Sie response.content statt response.text behebt das Problem:

document_contents = ContentFile(response.content) 
0

Ich hatte ein ähnliches Problem.

Ich wechselte zu Boto3 und Speicher-Engine zu.

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' 

Schließlich musste ich auch den Inhalt konvertieren binär .encode mit ('utf-8')

my_model.save("filename", document_contents.encode('uft-8'))