Django 存储 Boto 坏文摘
Django Storages Boto Bad Digest
我在 Python 上通过 django-storages boto 存储使用 S3 文件存储 3. 当我尝试上传文件时,出现此错误:
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>
...
我要保存的文件是一个正在请求下载的文件。它的要点是:
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)
我做错了什么?
查看这个相关的 boto 问题:https://github.com/boto/boto/issues/2868
Boto 在 Python3 中的字符串编码存在一些问题。如果您知道编码,则使用 response.content
而不是 response.text
可以解决问题:
document_contents = ContentFile(response.content)
我遇到了类似的问题。
我改为boto3,存储引擎改为to。
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
最后我还必须使用 .encode('utf-8')
将内容转换为二进制文件
my_model.save("filename", document_contents.encode('uft-8'))
我在 Python 上通过 django-storages boto 存储使用 S3 文件存储 3. 当我尝试上传文件时,出现此错误:
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>
...
我要保存的文件是一个正在请求下载的文件。它的要点是:
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)
我做错了什么?
查看这个相关的 boto 问题:https://github.com/boto/boto/issues/2868
Boto 在 Python3 中的字符串编码存在一些问题。如果您知道编码,则使用 response.content
而不是 response.text
可以解决问题:
document_contents = ContentFile(response.content)
我遇到了类似的问题。
我改为boto3,存储引擎改为to。
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
最后我还必须使用 .encode('utf-8')
将内容转换为二进制文件my_model.save("filename", document_contents.encode('uft-8'))