我正在使用nodeJS创建一个公共存储桶(为ES5 / ES6混合道歉,复制了Google的示例是ES5):
var gcloud = require('google-cloud');
const gcs = gcloud.storage({
projectId: 'h-212f6',
keyFilename: './h-9a814129651f4.json'
});
const createBucket = (bucketName) => {
// Create a new bucket.
return new Promise((resolve, reject) => {
gcs.createBucket(bucketName, function (err, bucket) {
if (err) {
reject(err);
}
bucket.acl.add({
entity: 'allUsers',
role: gcloud.storage.acl.READER_ROLE
}, function(err, aclObject) {
console.log('err -> ', err);
});
resolve(bucket);
});
});
};
const upload = (bucket, filepath, options) => {
return new Promise((resolve, reject) => {
bucket.upload(filepath, options, function (err, file) {
if (err) {
reject(err);
}
resolve(file)
});
});
};
但无法从Chrome访问该文件:
更新:
当我更改文件的ACL时,一切似乎都有效:
const upload = (bucket, filepath, options) => {
return new Promise((resolve, reject) => {
bucket.upload(filepath, options, function (err, file) {
if (err) {
reject(err);
}
file.acl.add({
entity: 'allUsers',
role: gcs.acl.READER_ROLE
}, function (err, aclObject) {
console.log('err -> ', err);
});
resolve(file)
});
});
};
但是,我假设更改桶ACL应该足够了,不是吗?
答案 0 :(得分:3)
在上面的代码中设置ACL时,您需要为现有对象设置ACL。要将其设置为新对象的默认ACL,您还需要执行以下操作:
bucket.acl.default.add({
entity: 'allUsers',
role: gcloud.storage.acl.READER_ROLE
}, function(err, aclObject) {
console.log('err -> ', err);
});
有关更多示例,请参阅here。