App Engine(Java)Blobstore:成功存储blob后没有BlobInfo

时间:2012-09-12 06:25:29

标签: java google-app-engine blobstore datastore

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

注意:

  • 如果删除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);
    }

2 个答案:

答案 0 :(得分:1)

最后,我发现了问题。键字符串(blobKeyStr)在末尾包含换行符。令人讨厌的是你在日志记录中没有注意到它。添加blobKeyStr = blobKeyStr.trim()解决了问题

答案 1 :(得分:0)

首先执行以下操作:

  • 通过访问“http:// local host:8080 / _ah / admin”然后访问数据存储查看器,确保blob存在于本地数据存储中。您应该看到为您的blob创建的新条目。记下键值。

  • 确保您在请求中使用了正确的blob密钥。

您提到由于简洁,您已从上方删除了异常处理代码。当你想要检索那些据称不存在的blob时,你会得到任何异常吗?