9

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

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

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

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

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

1 回答 1

10

我更近了!

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

原来 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()
于 2012-08-19T06:20:05.733 回答