通过django存储boto s3将二进制数据保存到模型文件中

Bob*_*ryn 8 python django amazon-s3 django-storage

我从echosign API中提取了一个pdf,它给了我一个文件的字节.

我正在尝试将这些字节保存到boto s3支持的FileField中.我运气不好.

这是我得到的最接近的,但它在保存'发言人'时出错,而写入S3的pdf似乎已损坏.

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

afile = speaker.the_file = S3BotoStorageFile(filename, "wb", S3BotoStorage())
afile.write(fileData)
afile.close()
speaker.save()
Run Code Online (Sandbox Code Playgroud)

Bob*_*ryn 9

我离我更近了!

    content = ContentFile(fileData)
    speaker.profile_file.save(filename, content)
    speaker.save()
Run Code Online (Sandbox Code Playgroud)

事实证明FileField已经是S3BotoStorage了,您可以通过传递原始数据来创建一个新文件.我不知道的是如何使它成为二进制(我假设它不是).尽管其中包含大量数据,但我的文件仍然存在损坏.

以下是echosign的回复:https://secure.echosign.com/static/apiv14/sampleXml/getDocuments-response.xml

我基本上抓住字节并将其传递给ContentFileas fileData.也许我需要base64解码.去试试吧!

更新

那很有效!

在我弄清楚答案之前,我似乎必须在这里提出这个问题.叹.所以最终的代码看起来像这样:

content = ContentFile(base64.b64decode(fileData))
speaker.profile_file.save(filename, content)
speaker.save()
Run Code Online (Sandbox Code Playgroud)