python - 通过django storages boto s3将二进制数据保存到模型上的文件中

标签 python django amazon-s3 django-storage

我正在从 echosign API 中提取一个 pdf,它提供了一个文件的字节数。

我正在尝试获取这些字节并将它们保存到 boto s3 支持的 FileField 中。我运气不太好。

这是我得到的最接近的,但它在保存“扬声器”时出错,而且 pdf 虽然写入 S3,但似乎已损坏。

这里 speaker 是我的模型的一个实例,fileData 是从 echosign api 返回的 'bytes' 字符串

afile = speaker.the_file = S3BotoStorageFile(filename, "wb", S3BotoStorage())
afile.write(fileData)
afile.close()
speaker.save()

最佳答案

我更近了!

    content = ContentFile(fileData)
    speaker.profile_file.save(filename, content)
    speaker.save()

事实证明,FileField 已经是一个 S3BotoStorage,您可以通过像这样传递原始数据输入来创建一个新文件。我不知道的是如何使它成为二进制文件(我假设不是)。尽管其中包含大量数据,但我的文件总是出现损坏。

作为引用,这里是来自 echosign 的回复: https://secure.echosign.com/static/apiv14/sampleXml/getDocuments-response.xml

我实际上是在获取字节并将其作为 fileData 传递给 ContentFile。也许我需要 base64 解码。打算试试看!

更新

成功了!

看来我得在这里问问题才能找到答案。叹。所以最终代码看起来像这样:

content = ContentFile(base64.b64decode(fileData))
speaker.profile_file.save(filename, content)
speaker.save()

关于python - 通过django storages boto s3将二进制数据保存到模型上的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12024465/

相关文章:

python - 计算结构中的截留水

python - 双轴上的刻度和标签

python - 使用 Django 和 csv.DictReader 解析 CSV

amazon-web-services - Cloudtrail 中未显示控制台登录事件

django - '可疑操作: Attempted access to "" denied' while loading static files

python - Pandas:如何通过保留第一个数据帧的信息来合并列上的两个数据帧?

python - 如何从字典的字典中绘制分组条形图

django - 如何在涉及 request.user.is_authenticated() 和 bool 对象不可调用的 Python Django 中修复此错误?

html - CSRF 中间件 - 更改 csrf_token 输出(从 xHTML 到 HTML)

hadoop - 从HDFS复制到S3时使用GroupBy合并文件夹中的文件