【问题标题】:Google Cloud Storage set cache-control with signed urls upload谷歌云存储设置缓存控制与签名的 url 上传
【发布时间】:2016-01-18 08:43:54
【问题描述】:

我们使用签名的网址从浏览器上传。我一直无法弄清楚如何在上传时设置缓存控制标头。

我们正在使用 gcloud-node 库对 url 进行签名:

var bucket = gcs.bucket('mybucket');
var file = bucket.file('image.jpg');

var expireDate = new Date
expireDate.setDate(expireDate.getDate() + 1);

file.getSignedUrl({
  action: 'write',
  expires: expireDate,
  contentType: 'image/jpeg'
}, function (err, signedUrl) {
  if (err) {
    console.error('SignedUrl error', err);
  } else {
    console.log(signedUrl);
  }
});

在将文件上传到 GCS 时如何设置 Cache-Control 标头?
要上传的代码正在浏览器中运行:

var signedUrl = ...; // get from nodejs server
var fileList = this.files;

var file = fileList[0];

jQuery.ajax({
  url: signedUrl,
  type: 'PUT',
  data: file,
  processData: false,
  contentType: 'image/jpeg'
})

【问题讨论】:

  • @mike-schwartz,可以使用签名的 url 设置缓存控制吗?

标签: file-upload google-cloud-storage google-cloud-platform


【解决方案1】:

这是可能的,但文档很糟糕。首先,您需要在要上传到的存储桶上设置 CORS:

gsutil cors set cors.json gs://bucket-name

cors.json 包含以下内容:

[{
    "maxAgeSeconds": 3600,
    "method": ["GET", "PUT", "POST"],
    "origin": [
        "http://localhost:3000"
    ],
    "responseHeader": ["Content-Type", "Cache-Control"]
}]

“Cache-Control”需要列在“responseHeader”字段中。然后像往常一样上传,但设置 Cache-Control 标头。使用fetch 将是:

fetch(uploadUrl, {
    method: 'PUT',
    body: blob,
    headers: {
        'Content-Type': blob.type,
        'Cache-Control': 'public, max-age=31536000',
    },
});

【讨论】:

  • 这对我仍然不起作用。我必须像gsutil -h "Cache-Control:no-cache" 这样使用gsutil 命令。能够在常规的 fetch / curl 请求上传中设置此标头真的很好。
  • “这是可能的,但文档很糟糕”适用于 GCP 的太多功能。
【解决方案2】:

您拥有的 sn-p 正在获得一个签名的 url。当您将对象上传(插入)到 GCS 时,您应该可以通过 API 进行设置:

https://cloud.google.com/storage/docs/json_api/v1/objects/insert

【讨论】:

  • 签名的url和json api不一样
  • Jaap,能否麻烦您澄清一下这个问题?最初的问题是“如何在将文件上传到 GCS 时设置 Cache-Control 标头?”。但是您显示的 sn-p 是签名 URL。要在将文件上传到 GCS 时设置 Cache-Control 标头,您应该查看 objects.insert API,它有一个“cacheControl”属性。
  • 你是对的,我已经更新了问题以显示我如何使用签名的 url 上传文件。
  • thnx ;) 不确定是谁投了反对票,因为它完全符合最初的要求。
  • 从签名 URL 上传时似乎没有办法传入缓存控制标头。 cloud.google.com/storage/docs/access-control#Signed-URLs
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2014-02-02
  • 2016-07-31
  • 2020-09-10
相关资源
最近更新 更多