2012-11-11 66 views
1

文件存儲在Appengine Blobstore中。我有一個servlet處理程序來允許用戶下載文件。我使用BlobStoreService來做到這一點。從AppEngine的BlobStore下載Blob,文件名爲

在我的servlet,我有以下幾點:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
BlobKey blobKey = new BlobKey("SOME_BLOB_KEY_HERE"); 
blobstoreService.serve(blobKey, res); 

它完美。下載文件的文件名來自servlet映射。

如何在我的servlet中設置文件的文件名?

回答

6

你需要一個「內容處置」頭添加到響應:

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);