9

ファイルのバイトを取得するエコーサイン 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 に答える