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