3

我有一个在 Google Cloud Storage 中同步文件的后端应用程序,并且想在 javascript 中列出存储中的所有文件,而不需要从后端请求它们。我已经设置了 CORS,所有文件的 acl 都是公开的。API 有一段关于身份验证的内容:

您使用 Google Cloud Storage API 执行的大多数操作都必须经过身份验证。唯一的例外是对允许匿名访问的对象的操作。如果 AllUsers 组具有 READ 权限,则可以匿名访问对象。AllUsers 组包括 Internet 上的任何人。

如何设置 AllUsers 的权限?那只是将acl设置为公开阅读吗?

存储桶列表 API 调用是否属于需要进行身份验证的操作,或者是否可以这样做?

这是我想要实现的目标:

$.ajax({
    url: "http://storage.googleapis.com/" + BUCKET_NAME,
    method: "GET",
    headers: {
        "x-goog-project-id": PROJECT_ID
    }
});

任何帮助,将不胜感激。

4

3 回答 3

3

您可以使用JSON API从 JavaScript 获取存储桶的内容。

GitHub 上的 s torage-metabucket-javascript项目就是一个如何做到这一点的例子。桶清单代码在这里。有关工作解决方案,请参阅现场演示

作为替代方案,您可以使用google-api-javascript-client 库。GitHub 上的storage-getting-started-javascript 存储库显示了如何使用它的示例。

于 2013-03-02T18:51:13.393 回答
1

您需要在存储桶上(而不是仅在所有对象上)拥有公共读取 acl,以便在未经授权的情况下列出存储桶。但是,您应该谨慎使用公共阅读存储桶,因为您可能会在月底收到令人惊讶的账单 :)

于 2013-03-05T07:17:26.403 回答
0

为了列出存储桶中的对象,您必须使存储桶匿名可读。转到开发人员控制台存储-> 浏览器。在编辑权限中选择/写入User - allUsers - Read。存储桶内的文件可以有任何 ACL。

之后可以列出文件如下:

Storage.bucket = 'mybucket';

Storage.listObjectsItems = function(prefix, delimiter, callback) {
  var request = gapi.client.storage.objects.list({
    'bucket' : Storage.bucket,
    'prefix' : prefix,
    'delimiter' : delimiter
  });
  request.execute(function(resp) {
    console.log(resp);
    callback(resp.items);
  });
 };

Storage.listObjectsPrefixes = function(prefix, delimiter, callback) {
var request = gapi.client.storage.objects.list({
    'bucket' : Storage.bucket,
    'prefix' : prefix,
    'delimiter' : delimiter
});
request.execute(function(resp) {
    console.log(resp);
    callback(resp.prefixes);
});
 };

您可以在此处阅读有关前缀和分隔符的更多信息:https ://cloud.google.com/storage/docs/json_api/v1/objects/list

具体示例:假设我们在控制台->存储->浏览器中有下一个存储桶结构:

mybucket/folder1/folder11/..
                 folder12/..
                 folder13/..
                   ...
                 folder1n/..

称呼

Storage.listObjectsPrefixes('folder1/', '/',callback );

它将返回(作为回调的参数)folder1 中的所有文件夹。

我没有看到(可能是错误的?)使存储桶匿名可读的财务危险。它只能从有限的域访问,为什么有人会浏览我的存储桶的内容,即使他发现(如何?)这样的存储桶存在。

于 2015-11-01T10:02:37.793 回答