我正在尝试使用gcloud库(NodeJS)上传到谷歌存储。
我需要启用公共读取属性,并将缓存过期设置为 5 分钟。
我正在使用这个(简化的)代码:
storage = gcloud.storage({options}
bucker = storage.bucket('name');
fs.createReadStream(srcPath).pipe(bucket.file(targetFile).createWriteStream()).on('error', function(err)
如何设置适当的 ACL/缓存过期?(我发现了这个,但不确定该怎么做:https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.11.0/storage?method=acl)
感谢您的帮助
您可以按照此处的说明设置预定义的 ACL:
yourBucket.acl.default.add({
entity: "allUsers",
role: gcloud.storage.acl.READER_ROLE
}, function (err) {})
关于缓存控制,我不相信您可以将其设置为默认值,但是您可以在上传文件时设置:
var opts = { metadata: { cacheControl: "public, max-age=300" } }
bucket.file(targetFile).createWriteStream(opts)
参考: https://cloud.google.com/storage/docs/reference-headers#cachecontrol
API 已更改,请使用:
var gcloud = require('gcloud')({
projectId: 'your_id',
keyFilename: 'your_path'
});
var storage = gcloud.storage();
var bucket = storage.bucket('bucket_name');
bucket.acl.default.add({
entity: 'allUsers',
role: storage.acl.READER_ROLE
}, function(err) {});
要公开整个存储桶,您还可以使用:
bucket.makePublic
来源: https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/bucket.js#L607
或者仅针对文件:
var bucketFile = bucket.file(filename);
// If you upload a new file, make sure to do this
// in the callback of upload success otherwise it will throw a 404 error
bucketFile.makePublic(function(err) {});
来源:https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/file.js#L1241(链接可能会更改,请在源代码中查找makePublic
。
或:
bucketFile.acl.add({
scope: 'allUsers',
role: storage.acl.READER_ROLE
}, function(err, aclObject) {});
这是详细版本。
来源: https://github.com/GoogleCloudPlatform/gcloud-node/blob/v0.16.0/lib/storage/file.js#L116
斯蒂芬的评论是准确的,但是它对我不起作用,因为没有设置值。经过一些试验和错误,打开缓存控制(无破折号)以使其工作。在撰写本文时,这没有记录在需要采用这种格式的任何地方。我认为其他字段也会有同样的问题。
var opts = { metadata: { "cacheControl": "public, max-age=300" } }
bucket.file(targetFile).createWriteStream(opts)