Google云端存储使用已签名的网址上传设置缓存控制

时间:2015-10-19 21:08:46

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

我们使用已签名的网址从浏览器上传。我还没有能够弄清楚如何在上传时设置缓存控制标头。

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

invisibleRootItem

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

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

2 个答案:

答案 0 :(得分:0)

这是可能的,但是文档非常糟糕。首先,您需要在要上传到的存储桶上设置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',
    },
});

答案 1 :(得分:-1)

您拥有的代码片段是获取已签名的网址。当您将对象上传(插入)到GCS时,您应该能够通过API设置它:

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