Google app engine 使用文件名从AppEngine中的BlobStore下载Blob

Google app engine 使用文件名从AppEngine中的BlobStore下载Blob,google-app-engine,servlets,blobstore,Google App Engine,Servlets,Blobstore,文件存储在Appengine Blobstore中。我有一个servlet处理程序,允许用户下载文件。我用BlobStoreService来做这个 在我的servlet中,我有以下内容: BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); BlobKey blobKey = new BlobKey( "SOME_BLOB_KEY_HERE" ); blobstoreService.s

文件存储在Appengine Blobstore中。我有一个servlet处理程序,允许用户下载文件。我用BlobStoreService来做这个

在我的servlet中,我有以下内容:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = new BlobKey( "SOME_BLOB_KEY_HERE" );
blobstoreService.serve(blobKey, res);
它工作得很好。下载文件的文件名来自servlet映射


如何在my servlet中设置文件的文件名?

您需要在响应中添加内容处置头:

BlobstoreServiceFactory.getBlobstoreService().serve(blobKey, resp);
BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey);

String encodedFilename = URLEncoder.encode(blobInfo.getFilename(), "utf-8");
encodedFilename.replaceAll("\\+", "%20");
resp.setContentType("application/octet-stream");

resp.addHeader("Content-Disposition", "attachment; filename*=utf-8''" + encodedFilename );

您需要将内容处置标头添加到响应:

BlobstoreServiceFactory.getBlobstoreService().serve(blobKey, resp);
BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey);

String encodedFilename = URLEncoder.encode(blobInfo.getFilename(), "utf-8");
encodedFilename.replaceAll("\\+", "%20");
resp.setContentType("application/octet-stream");

resp.addHeader("Content-Disposition", "attachment; filename*=utf-8''" + encodedFilename );