3

App Engine Blobstore のドキュメントによると、BlobStore の各エントリに対して DataStore に BlobInfo エントリがあるはずです。次に、以下のコードで blobInfo が null になっているのはなぜですか?

ノート:

  • BlobInfo コードを削除すると、サーブレットは必要に応じてリソースを返します (ただし、ファイル名はありません)。
  • 簡潔にするために、例外とパラメーターの処理を削除しました

私はあなたの助けにとても感謝しています.

public class GetResourceServlet extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    private BlobInfoFactory infoFactory = new BlobInfoFactory();

    public void doGet (  HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {

       String blobKeyStr = request.getParameter("blob-key");
       BlobKey blobKey = new BlobKey(blobKeyStr);

       BlobInfo info = infoFactory.loadBlobInfo(blobKey); // returns null !?
       String fname = info.getFilename();
       response.addHeader("content-disposition", "attachment; filename=" + fname);

       blobstoreService.serve(blobKey, response);
    }
4

2 に答える 2

1

最後に、私は問題を見つけました。キー文字列(blobKeyStr)の最後に改行文字が含まれていました。厄介なのは、ロギングで気付かないことです。blobKeyStr = blobKeyStr.trim()解決した問題を追加する

于 2012-09-23T08:09:30.173 に答える
0

最初に次のことを行います。

  • 「http://local host:8080/_ah/admin」にアクセスし、次にデータ ストア ビューアーにアクセスして、ブロブがローカル データ ストアに存在することを確認します。BLOB の新しいエントリ Hcreated が表示されるはずです。キー値を書き留めます。

  • リクエストで正しい blob キーを使用していることを確認してください。

簡潔にするために、上記の例外処理コードを削除したと述べています。存在しないと思われる BLOB を取得するために ying を実行しているときに例外が発生しますか?

于 2012-09-12T16:58:02.600 に答える