NodeJS Google Storage无法使用gcloud实用程序创建新的Bucket

时间:2014-11-30 21:44:33

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

所以我在使用Node的gcloud插件时遇到了一些麻烦。

我可以通过他们的GUI手动创建一个存储桶,然后使用该容器就可以使用谷歌提供的gcloud库在我的节点程序中编写文件。

当我尝试创建新的存储桶时,问题出现了。

storage.createBucket('bucket1', function(err, bucket) {
                                      console.log(err)
                                      console.log(bucket)
                                    });

这总是会返回:

{ [Error: Invalid argument.]
  errors:
  [ { domain: 'global',
      reason: 'invalid',
      message: 'Invalid argument.' }],
   code: 400,
   message: 'Invalid argument.}

所以我认为我认为我正在通过一个"无效的论点"在这个如此有用的消息中说过3次......但我正在使用的存储桶名称对于我的谷歌存储来说是独一无二的。据我所知,它遵循命名约定。

欢迎任何见解。

以下是我用于设置链接的字符串:

 storage = gcloud.storage({
              keyFilename: __dirname + '/../credentials/XXXXXXXX-b1e05a5128e9.json',
              projectId: 'XXXXXXXX'
            });

请注意,我在读取和写入通过GUI手动创建的存储桶时没有任何问题。只是无法创建一个新的桶。

我还尝试了在所有云存储中全局应该是唯一的名称:

'com-missingmarble-bucket1'

修改: 按照史蒂文的建议进行API测试会产生相同的响应。我使用oAuth对浏览器进行了身份验证...与节点api中的auth有点不同,但结果是一样的。虽然我可能没有在API测试器中正确格式化我的请求,但这是我得到的:

请求:

POST https://www.googleapis.com/storage/v1/b?project=XXXXXXXXX&key={YOUR_API_KEY}
Content-Type:  application/json
Authorization:  Bearer xxxxxxxxxx
X-JavaScript-User-Agent:  Google APIs Explorer

{
 "name": "com-missingmarble-bucket1"
}

响应:

    400 Bad Request

    {
     "error": {
      "errors": [
       {
        "domain": "global",
        "reason": "invalid",
        "message": "Invalid argument."
       }
      ],
      "code": 400,
      "message": "Invalid argument."
     }
}

1 个答案:

答案 0 :(得分:0)

根据上面的评论,听起来你的问题已经解决......

对于未来的人们来看这个问题,听起来问题是您需要在创建时提供存储桶应该属于哪个项目

当您上传/下载文件时,您指定了一个存储桶,因此Google不需要知道项目ID /编号,因为存储桶是全局唯一的并且与单个项目相关联。

另一方面,当您创建存储桶时,可能一组凭据可以访问多个项目,因此您需要指定存储桶应属于哪个项目。 / p>