我正在从 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/