我将使用Google应用引擎Blobstore来存储我上传的文件。文件类型可以是任何东西(.txt,.pdf,.docx等) 我已经编写了以下servlet来下载谷歌应用程序引擎Blobstore中存储的文件。
public class Serve extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
public void doGet(HttpServletRequest req,HttpServletResponse res) 抛出IOException {
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
blobstoreService.serve(blobKey, res);
}
}
但每次我通过提供如下网址请求文件时, http://127.0.0.1:8888/serve?blob-key=DEHQ3U_2wtUdEL7XPI434Q 文件下载得很好。但没有文件的扩展名。并且文件的名称始终是“服务” 如何使用文件的原始名称下载上传的文件? 谢谢,
答案 0 :(得分:4)
我使用以下代码通过将blob-key作为String传递给我的Serve.java来提供blob。使用原始文件名和原始扩展名下载文件。在http://onjava.com/onjava/excerpt/jebp_3/index3.html
找到了更详细的讨论BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobInfoFactory bi = new BlobInfoFactory();
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
String fname = bi.loadBlobInfo(blobKey).getFilename();
res.setContentType("application/x-download");
res.setHeader("Content-Disposition", "attachment; filename=" + fname);
blobstoreService.serve(blobKey, res);
答案 1 :(得分:3)
我知道python有一个send_as
选项可以自动设置响应的文件名,但我认为在Java中你必须在响应中添加Content-Disposition
标题,如:
Content-Disposition: attachment; filename=your-file.docx;
blob的BlobInfo保留原始文件名,您可以通过getFilename