文件上传谷歌应用引擎blobstore

时间:2011-07-24 16:42:13

标签: google-app-engine file-upload blobstore

我将使用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 文件下载得很好。但没有文件的扩展名。并且文件的名称始终是“服务” 如何使用文件的原始名称下载上传的文件? 谢谢,

2 个答案:

答案 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

获取它