在GAE中服务blob的问题

时间:2011-09-17 20:52:08

标签: java google-app-engine blobstore

我目前正在构建一个网络应用程序,允许用户通过blobstore上传内容并稍后下载。

但是,负责下载的servlet称为BlobServiceServlet 并且每当用户下载blob时,文件名将更改为“BlobServiceServlet”,并且扩展名有时也会更改为.bin。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

在响应中添加“Content-disposition”标头。

有关示例,请参阅http://en.wikipedia.org/wiki/MIME#Content-Disposition

,例如,在处理程序中,

self.response.headers['Content-Disposition'] = 'attachment; filename=foo.doc'

答案 1 :(得分:4)

只是一个额外的信息。 这是让浏览器知道文件大小的代码:

BlobInfoFactory blobInfoFactory = new BlobInfoFactory(DatastoreServiceFactory.getDatastoreService());
BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey);
resp.setContentLength(new Long(blobInfo.getSize()).intValue());
resp.setHeader("content-type", blobInfo.getContentType());
resp.setHeader("content-disposition", "attachment;filename=" + blobInfo.getFilename());
blobstoreService.serve(blobKey, resp);

请注意,如果您的文件大小超过1MB,则不会将文件大小发送到浏览器。 GAE一次读取1MB的blob并覆盖响应中的文件大小标题。

我在这里找到了所有这些信息: http://www.mail-archive.com/google-appengine@googlegroups.com/msg29314.html