3

根据 App Engine Blobstore 的文档,对于 BlobStore 中的每个条目,DataStore 中都应该有一个 BlobInfo 条目。那为什么我的 blobInfo 在下面的代码中为空?

笔记:

  • 如果我删除 BlobInfo 代码,则 servlet 会按原样返回资源(但没有文件名)
  • 为简洁起见,我删除了异常和参数处理

我将非常感谢您的帮助。

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 键。

您提到由于简洁而从上面删除了异常处理代码。您在检索本应不存在的 blob 时是否遇到任何异常?

于 2012-09-12T16:58:02.600 回答