Google存储分区是公开的,仍然无法访问文件

时间:2016-10-05 06:11:52

标签: node.js google-cloud-storage

我正在使用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访问该文件:

chrome error

更新:

当我更改文件的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应该足够了,不是吗?

1 个答案:

答案 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