2

私は、PaintWeb ( http://code.google.com/p/paintweb /) と呼ばれる HTML5 キャンバス ライブラリを介して描画された画像をユーザーがアップロードできるようにする Java の Appengine アプリケーションに取り組んでいます。

現在、paintweb javascript ライブラリから XMLHttpRequest POST を formencoded イメージとして受け取るサーブレットがあります。

  1. Paintweb.js ライブラリは XMLHttpRequest POST を送信します

      send       = 'dataURL=' + encodeURIComponent(ev.dataURL), 
      headers    = {'Content-Type': 'application/x-www-form-urlencoded'}; 
    
  2. カスタム サーブレットは、フォーム エンコードされた画像データを BLOB としてデコードし、関連付けられた Drawing エンティティと共にデータストアに保存します。

  3. カスタム サーブレットは、データストア内の Blob を ContentType("image/png") として提供します 新しい BlobstoreService および ImageService 機能を使用して、HTML5 キャンバス イメージをアップロードし、それらを純粋な Blob として提供できるかどうか知りたいです (このチュートリアルGWTに示されているように) BlobstoreService および ImageService )

ドキュメント ( http://code.google.com/appengine/docs/java/blobstore/overview.html#Uploading_a_Blob ) によると、主な停止点は、フォームを POST する必要があることのようです:

 <input type="file" name="myFile"> 

Paintweb からは不可能だと思います。サーバー側で (データストアではなく) Blobstorage に blob を格納する何らかの方法があれば、CPU クォータを使用して画像を提供しないという利点を享受できる場合、回避策になる可能性があります。

Appengine URL Fetch サービスを使用して、画像ブロブのアップロードをサーバー側からブロブストレージ「createUploadURL()」に転送することは可能ですか、それとも良い考えですか。

http://code.google.com/appengine/docs/java/urlfetch/usingjavanet.html

可能だと思われますが、長期的にリソースを節約できるかどうかはわかりません (画像はアップロード時間よりも何回も表示できる単純な小さな図面なので、保存するメリットがあると思います/ BlobstoreService から提供します。

4

1 に答える 1

2

ここでの最良のオプションは、作成された画像を含む multipart/form-data エンコードされた本文で XMLHTTPRequest を使用することです。これは、ブロブストアが期待するものと一致するように構築できます。従うべき手順は次のようになります。

  1. 新しいブロブストア アップロード URL を返す JSON API を呼び出す
  2. イメージ データを 1 つの部分として含む MIME メッセージを、含めたい他のフィールドと共に作成します。
  3. XMLHTTPRequest を使用して、フォームをブロブストアにアップロードします。

これを行うには、MIME メッセージを自分で作成するか、それを行う Javascript ライブラリを見つける必要があります。

于 2010-09-20T09:57:57.107 に答える