3

我将使用 Google 应用引擎 Blobstore 来存储我上传的文件。文件类型可以是任何东西(.txt、.pdf、.docx 等),我编写了以下 servlet 来下载 Google 应用引擎 Blobstore 中存储的文件。

public class Serve extends HttpServlet { 

private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

公共无效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 文件都会很好地下载。但文件没有扩展名。并且文件的名称始终是“服务”我应该怎么做才能以文件的原始名称下载上传的文件?谢谢,

4

2 回答 2

4

我使用以下代码通过将 blob-key 作为字符串传递给我的 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);
于 2011-12-25T21:19:15.117 回答
3

我知道 python 有一个send_as选项可以自动设置响应的文件名,但我认为在 Java 中你必须Content-Disposition在响应中添加一个标头,例如:

Content-Disposition: attachment; filename=your-file.docx; 

Blob 的 BlobInfo 保留原始文件名,您可以通过getFilename

于 2011-07-24T20:15:18.930 回答