从App Engine Blobstore的文档中,对于BlobStore中的每个条目,DataStore中应该有一个BlobInfo条目。那么为什么我的blobInfo在下面的代码中为null?
注意:
我非常感谢你的帮助。
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);
}
答案 0 :(得分:1)
最后,我发现了问题。键字符串(blobKeyStr)在末尾包含换行符。令人讨厌的是你在日志记录中没有注意到它。添加blobKeyStr = blobKeyStr.trim()
解决了问题
答案 1 :(得分:0)
首先执行以下操作:
通过访问“http:// local host:8080 / _ah / admin”然后访问数据存储查看器,确保blob存在于本地数据存储中。您应该看到为您的blob创建的新条目。记下键值。
确保您在请求中使用了正确的blob密钥。
您提到由于简洁,您已从上方删除了异常处理代码。当你想要检索那些据称不存在的blob时,你会得到任何异常吗?