1

我正在使用 Google Cloud Storage 在 Google App Engine 中存储一个文件。该文件加载正常,但服务返回一个解释为二进制文件而不是原始 mime 类型的文件。您将在后面找到代码。有没有人知道发生了什么?

一、存储文件

GSFileOptionsBuilder optionsBuilder = new GSFileOptionsBuilder()
.setBucket(BUCKET_NAME)
.setKey(objectId)
.setAcl("project-private")
.setMimeType(mimeType)
.setContentDisposition("attachment;filename "+item.getName());

二、服务文件

blobKey = blobstoreService.createGsBlobKey("/gs/"+BUCKET_NAME+"/"+ fileName);

blobstoreService.serve(blobKey, resp);

三、与在 blobstore 中提供文件的区别

我有一段过去可以工作的代码。问题在于,显然 BlobInfo 对象仅适用于存储在 blobstore 中的对象,而不适用于存储在 Google Cloud Storage 中的对象

BlobInfo blobInfo = blobInfoFactory.loadBlobInfo(blobKey); 
resp.setContentLength(new Long(blobInfo.getSize()).intValue()); 
resp.setHeader("content-type", blobInfo.getContentType()); 
resp.setHeader("content-disposition", "attachment; filename=" + 
blobInfo.getFilename()); 
        blobstoreService.serve(blobKey, resp);  

非常欢迎任何帮助!

谢谢,

雨果

4

1 回答 1

1

因为您自己为 blob 提供服务,所以使用 blob 服务服务,您可以正确设置所有 HTTP 标头,包括内容类型。如果你想使用存储对象的内容类型,你应该自己获取它并在标题中设置它。

或者,您可以直接链接到 Google Storage 中的对象路径,在这种情况下,它将由 Google Storage 基础设施提供服务,并具有正确的 mimetype。

于 2012-07-23T04:56:55.537 回答