エラー
原因: java.lang.IllegalStateException: BLOB アップロード コールバック要求から呼び出す必要があります。com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads (BlobstoreServiceImpl.java:169) で
コード
public class UserUploadProfilePictureResource extends ServerResource {
@Post
public void handleBlobstoreUpload(Representation entity) {
Representation rep =null;
if (entity !=null) {
if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) {
Request restletRequest = getRequest();
HttpServletRequest servletRequest = ServletUtils.getRequest(restletRequest);
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(servletRequest);
可能な解決策(しかし、私が望んでいないこと)
初め。2 番目の HttpServlet を呼び出したくありません。
2番。この投稿に関しては、ファイルを手動で書き込む解決策があります。
- Google App Engineを使用してサーブレットでアップロードされたファイルをブロブとして取得する方法
- プログラムでJavaを使用してGoogle App Engineブロブストアに画像をアップロードする
Google は次のように述べています。
非推奨: ファイルを Blobstore に書き込むためにここで使用されている Files API 機能は、Google Cloud Storage にファイルを書き込み、Blobstore を使用してそれらを提供することを優先して、将来的に削除される予定です。
可能なSolution2(ただし、回避策の概念のみ)
http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/
Bret Slatkin は、API がファイルのアップロードに使用される POST URL を作成するときに、潜在的なスニッフィングを軽減する一意のワンタイム URL を作成すると述べています。
これは、ユーザーが送信する Web フォームをレンダリングするシナリオに最適です。ただし、ファイルのアップロードを可能にする REST API を提供しようとしている場合 (たとえば、TwitPic のようなものを考えてみてください)、状況が難しくなります。この場合、Web フォームが行うことをシミュレートする独自のレンダリングを作成する必要があります (ファイルを取得し、ランダムな POST URL を作成し、それを呼び出します…)。
質問
Google App Engine に画像を保存する最善の方法は何ですか? ブロブストアよりも良い方法はありますか? ブロブストアに画像を保存するにはどうすればよいですか?