Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 谷歌云存储集缓存控制与签名URL上传_File Upload_Google Cloud Storage_Google Cloud Platform - Fatal编程技术网

File upload 谷歌云存储集缓存控制与签名URL上传

File upload 谷歌云存储集缓存控制与签名URL上传,file-upload,google-cloud-storage,google-cloud-platform,File Upload,Google Cloud Storage,Google Cloud Platform,我们正在使用已签名的URL从浏览器上载。我还没有弄清楚如何在上传时设置缓存控制头 我们正在使用gcloud节点库对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

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

我们正在使用gcloud节点库对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时,如何设置缓存控制头?
要上载的代码正在浏览器中运行:

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

您拥有的代码片段正在获取签名url。将对象上载(插入)到GCS时,应能够通过API进行设置:


这是可能的,但是文档太糟糕了。首先,您需要在要上载到的存储桶上设置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"]
}]
“缓存控制”需要列在“responseHeader”字段中。然后像平常一样上传,但设置
缓存控制
标题。使用
fetch
可以:

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

签名URL与json api.Jaap不同,麻烦您澄清一下这个问题好吗?最初的问题是“如何在将文件上载到GCS时设置缓存控制头?”。但您显示的代码片段是签名URL。要在将文件上载到GCS时设置缓存控制标头,您应该查看objects.insert API,它具有“cacheControl”属性。您是对的,我已经更新了问题,以显示如何使用签名url上载文件。thnx;)不确定是谁否决了响应,因为它完全在原始ask中。从签名url上载时,似乎没有办法传入缓存控制头@mike schwartz,可以使用签名URL设置缓存控制吗?这对我来说仍然不起作用。我必须像下面这样使用
gsutil
命令
gsutil-h“缓存控制:无缓存”
。如果能够在一个常规的fetch/curl请求上传中设置这个头,那就太好了。“这是可能的,但是文档太糟糕了”适用于太多的GCP特性。