【问题标题】:Create and Share Bucket in gcloud storage using Node.js Client使用 Node.js 客户端在 gcloud 存储中创建和共享存储桶
【发布时间】:2023-11-24 01:55:01
【问题描述】:

我需要使用 Node.js 客户端在 gcloud 存储中创建和共享存储桶。

这是我的代码

 Bucket.createNewBucket = function (request, callBack) {
    // code for create a new bucket
    var bucketName = request.body.bucketName;

    gcs.createBucket(bucketName, function (err, bucket) {
        if (!err) {
            console.log("created bucket successfully");
            var bucketadded = gcs.bucket(bucketName);
            bucketadded.acl.add({
                entity: 'testmail@gmail.com',
                role: 'READER'
            }, function (err, aclObject) {
                if (!err) {console.log("acl added successfully");
                }else{
                    console.log(err);
                }
             });
            callBack(null, true);
            return;
        } else {
            callBack("Error with bucket creation. Error: " + err, true);
            return;
        }
    });
};

使用此代码,我成功地在谷歌存储中创建了一个存储桶。但是我不能给bucket添加acl权限。

我遇到了这样的错误

{ [ApiError: Invalid Value]
  errors: [ { domain: 'global', reason: 'invalid', message: 'Invalid Value' } ],
  code: 400,
  message: 'Invalid Value',
  response: undefined }

【问题讨论】:

  • 在创建的时候给bucket添加acl权限
  • 创建bucket后需要添加权限

标签: node.js google-cloud-storage gcloud gcloud-node


【解决方案1】:

使用这个

entity: 'user-testmail@gmail.com'

而不是

entity: 'testmail@gmail.com'

【讨论】:

    【解决方案2】:

    实体比电子邮件地址更复杂。在这种情况下,正确的值是“user-manafcj@gmail.com”。组还有其他类别,以及一些特殊值,例如“AllUsers”。

    记录在这里:https://cloud.google.com/storage/docs/json_api/v1/objectAccessControls/insert

    【讨论】:

    • 感谢布兰登。这是我的错。 bcse , 文档包含全图