0

ajax経由でフォームからs3にファイルをアップロードしようとしています。クライアント側でFineuploader http://fineuploader.com/を使用し、サーバー側で webapp2 を使用しています。リクエストでパラメーターをqqfileとして送信し、リクエストヘッダーで画像データを確認できますが、マルチパートエンコーディングを使用しないブラウザーでそれを取得する方法がわかりません。

これは、マルチパートを使用した標準のhtmlフォーム投稿で行っていた方法です。

image = self.request.POST["image"]

これにより、画像名と画像ファイルが得られます

現在、データではなく画像ファイル名を取得することしかできませんでした

image = self.request.get_all('image')
[u'image_name.png']

POST を使用すると、コンテンツ ヘッダーが application/octet-stream であるという警告が表示されます

<NoVars: Not an HTML form submission (Content-Type: application/octet-stream)>

GAE の外部で webapp2 に BlobStoreHandler を実装するにはどうすればよいですか?

4

2 に答える 2

0

あなたの質問コードは私にはあまり明確ではありません。ただし、例を使用できます。

Nick Johnson のこの記事をご覧ください。彼は、クライアントでアプリ エンジンのブロブストアと Plupload を使用してドロップボックス サービスを実装しています: http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-Blobstore-API-part-2

于 2012-11-29T22:09:48.460 に答える
0

マルチパートでエンコードされたフォームをハンドラーエンドポイントに送信するFineuploader http://fineuploader.com/を使用することになりました。

ハンドラー内では、POST を参照するだけで、FieldStorage オブジェクトを cStringIO オブジェクトに読み込むことができます。

image = self.request.POST["qqfile"]
imgObj = cStringIO.StringIO(image.file.read())

# Connect to S3...
# create s3 Key 
key = bucket.new_key("%s" % uuid.uuid4());

# guess mimetype for headers
file_mime_type = mimetypes.guess_type(image.filename)
if file_mime_type[0]:
   file_headers = {"Content-Type": "%s" % file_mime_type[0]}
else:
   file_headers = None

key.set_contents_from_string(imgObj.getvalue(), headers=file_headers)

key_str = key.key

#return JSON response with key and append to s3 url on front end.

注: qqfile は、fineuploader が使用するパラメーターです。

私は進行状況を偽っていますが、BlobStoreUploadHandler を必要としない私のユースケースでは問題ありません。

于 2013-03-06T17:33:29.253 に答える