4

以下のコードが機能しないのはなぜですか?電子メールが受信され、ファイルは正しいファイル名で送信されます(これは.pngファイルです)。しかし、ファイルを開こうとすると、正しく開かれません(Windowsギャラリーはそれとそれcan't open this photo or videoを報告しますthe file may be unsupported, damaged or corrupted)。

blobstore_handlers.BlobstoreDownloadHandlerのサブクラス(基本的にはGAEドキュメントの正確なハンドラー)と同じblobキーを使用してファイルをダウンロードすると、すべてが正常に機能し、Windowsがイメージを読み取ります。

もう1つ情報があります。ダウンロードと電子メールのバイナリファイルは非常によく似ていますが、長さがわずかに異なります。

GAEブロブストアから送信される電子メールの添付ファイルを取得する方法について誰かがアイデアを持っていますか?S / Oについても同様の質問があり、他の人がこの問題を抱えていることを示唆していますが、結論は出ていないようです。

from google.appengine.api import mail
from google.appengine.ext import blobstore

def send_forum_post_notification():
blob_reader = blobstore.BlobReader('my_blobstore_key')
blob_info = blobstore.BlobInfo.get('my_blobstore_key')
value = blob_reader.read()
mail.send_mail(
    sender='my.email@address.com',
    to='my.email@address.com',
    subject='this is the subject',
    body='hi',
    reply_to='my.email@address.com',
    attachments=[(blob_info.filename, value)]
)

send_forum_post_notification()
4

3 に答える 3

1

アタッチメントにタプルを使用する理由がわかりません。私が使う :

message = mail.EmailMessage(sender = ......
message.attachments = [blob_info.filename,blob_reader.read()]
于 2013-02-20T12:20:29.217 に答える
1

このコードはdev_appserverでは機能しませんが、本番環境にプッシュすると機能することがわかりました。

于 2013-02-21T07:56:31.487 に答える
1

Python GoogleAppEngineアプリケーションでblobstoreを使用して同様の問題が発生しました。私のアプリケーションは画像ではなくPDFファイルを処理しますが、上記のコードと同様のコードを使用すると、「ファイルがサポートされていない、破損している、または破損している可能性があります」というエラーも表示されました。

この方法で問題にアプローチしてみてください。バイナリストリームを読み取る前に、BlobInfoオブジェクトでopen()を呼び出します。この行を置き換えます:

value = blob_reader.read()

...これらの2行で:

bstream = blob_info.open()
value = bstream.read()

次に、この行も削除できます。

blob_reader = blobstore.BlobReader('my_blobstore_key')

...上記のbstreamはBlobReaderタイプであるため。

Googleの関連ドキュメントは次の場所にあります: https ://cloud.google.com/appengine/docs/python/blobstore/blobinfoclass#BlobInfo_filename

于 2015-04-09T22:15:44.890 に答える