HTTPリクエストを介して画像ファイルを受信し、それをBlobstoreに保存しています。私のコードは、[https://developers.google.com/appengine/docs/java/blobstore/overview#Writing_Files_to_the_Blobstore][1]にあるコードに沿っています。
保存した画像のブロブキーで関数ImagesService.getServingUrl()を呼び出すと、次のメッセージが表示されます。
HTTP ERROR 500
Problem accessing /upload. Reason:
Failed to read image
Caused by:
java.lang.IllegalArgumentException: Failed to read image
at com.google.appengine.api.images.ImagesServiceImpl.getServingUrl(ImagesServiceImpl.java:282)
何時間もグーグルして解決策を見つけようとした後、問題は関数closeFinally()に障害があることだと思います。これは、作成した新しいBLOBイメージを閉じた後、BLOBに関連付けられたFileStatsオブジェクトがhasFinalizedName()に対してfalseを返すためだと思います。ただし、blobはisClosed()およびisFinalized()に対してtrueを返します。また、そのフルパスは次のようになります。
/ blobstore / writable:xFSAF_493dsfAfw489vFa .. ..
閉じていれば書き込み可能ではないと思います。
だから私の質問は次のとおりです:誰かがgetServingUrlが機能しないという解決策を持っていますか?誰かがgetServingUrlの回避策を持っていますか?ユーザーに提供する画像が欲しいのですが、これらの画像を静的ファイルとして存在させたいのです。blobstoreを使用したgetServingUrlが私にとって最良の選択のようです。私が見たすべてのBlobstoreとGoogleCloudStorageの質問に対して、Blobstoreが勝ったように見えたので、GoogleCloudStorageを使用したくありません。