【发布时间】:2011-11-19 10:31:28
【问题描述】:
我目前正在构建一个网络应用程序,允许用户通过 blobstore 上传内容并在以后下载它。
但是,负责下载的 servlet 称为 BlobServiceServlet 每当用户下载 blob 时,文件名都会更改为“BlobServiceServlet”,并且扩展名有时也会更改为 .bin。有谁知道如何解决这个问题?
【问题讨论】:
标签: java google-app-engine blobstore
我目前正在构建一个网络应用程序,允许用户通过 blobstore 上传内容并在以后下载它。
但是,负责下载的 servlet 称为 BlobServiceServlet 每当用户下载 blob 时,文件名都会更改为“BlobServiceServlet”,并且扩展名有时也会更改为 .bin。有谁知道如何解决这个问题?
【问题讨论】:
标签: java google-app-engine blobstore
在响应中添加“Content-disposition”标头。
有关示例,请参阅 http://en.wikipedia.org/wiki/MIME#Content-Disposition。
例如,在处理程序中,
self.response.headers['Content-Disposition'] = 'attachment; filename=foo.doc'
【讨论】:
只是一个附加信息。 这是让浏览器知道文件大小的代码:
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
【讨论】: