Google app engine 文件上传谷歌应用程序引擎blobstore

Google app engine 文件上传谷歌应用程序引擎blobstore,google-app-engine,file-upload,blobstore,Google App Engine,File Upload,Blobstore,我将使用谷歌应用程序引擎Blobstore来存储我上传的文件。文件类型可以是任何内容(.txt、.pdf、.docx等) 我编写了以下servlet来下载Google应用程序引擎Blobstore中存储的文件 public class Serve extends HttpServlet { private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 公共无效数据集(Ht

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

public class Serve extends HttpServlet { 

private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
公共无效数据集(HttpServletRequest-req、HttpServletResponse-res) 抛出IOException{

    BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
    blobstoreService.serve(blobKey, res);      

}
}

但每次我请求一个文件时,都会给出一个url,如下所示, 文件下载得很好。但文件没有扩展名。文件名始终为“serve” 我应该怎么做才能下载带有原始文件名的上传文件?
谢谢,

我知道python有一个
send_as
选项,可以自动设置响应的文件名,但我认为在Java中,您必须为响应添加
内容配置
标题,如:

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

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

获取它。我使用以下代码通过将blob键作为字符串传递到my service.java来为blob提供服务。使用原始文件名和原始扩展名下载文件。在上找到了更详细的讨论


对如果我知道文件名,我可以设置标题。但是有什么方法可以使用blob键获取存储文件的文件名吗?每个Blobstore“blob”都有一个相关的
BlobInfo
实体,可以使用blob键获取该实体。BlobInfo实体存储上传文件的原始文件名,可通过
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);