【问题标题】:Serve file using Google Cloud Storage does not retrieve the mime type使用 Google Cloud Storage 服务文件未检索到 MIME 类型
【发布时间】:2012-07-19 20:04:12
【问题描述】:

我正在使用 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);  

非常欢迎任何帮助!

谢谢,

雨果

【问题讨论】:

标签: google-app-engine


【解决方案1】:

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

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

【讨论】:

  • 这似乎不起作用。它确实为可公开访问的文件设置了image/png mime 类型(我可以在存储桶控制台中看到它),但该文件仍以application/octet-stream 的形式提供,可能是因为它没有.png 扩展名。因此,当公开访问时,图像被下载而不是显示。
猜你喜欢
  • 2014-01-18
  • 2015-07-18
  • 1970-01-01
  • 2013-03-07
  • 2018-10-17
  • 2017-04-07
  • 1970-01-01
  • 2022-06-30
  • 2018-10-31
相关资源
最近更新 更多