S3 / Cloudfront:如何在存储桶中列出文件夹的内容

好的

我编写了一种方法,该方法对URL进行签名以读取可通过Cloudfront访问的S3存储桶:

private HTTPResponse signURL(String endpoint) {
    String keyPairId = 'keyPairId';
    String secret    = 'SOME_SECRET';
    String method    = 'GET';
    Datetime dt      = Datetime.now();
    Long l           = dt.getTime();
    Long expiryLong  = (l / 1000) + 3600;
    String expiry    = String.valueOf(expiryLong);
    String policy    = policy('http://' + cfhost + '/' + endpoint, expiry);
    String policyEnc = EncodingUtil.base64Encode(Blob.valueOf(policy));
    String rPolicy   = cfReplace(policyEnc);
    Blob mac         = Crypto.generateMac('HMACSHA1',
                                          Blob.valueOf(rPolicy),
                                          Blob.valueOf(secret));
    String signature = cfReplace(EncodingUtil.base64Encode(mac));

    HttpRequest req = new HttpRequest();
    req.setMethod(method);
    req.setEndpoint('http://' + cfhost + '/' + endpoint + '?Policy=' +
        policyEnc + '&Signature=' + signature + '&Key-Pair-Id=' +
        keyPairId);

    Http http = new Http();
    HTTPResponse res = http.send(req);
    return res;
}

现在,如果将端点设置为,则我的方法可以正常工作''如果将文件夹名称放在端点中(如00Q17000008LRcAEAW/*),那么XML响应中会出现很多错误。

XMLNode[ELEMENT,Error,null,null,null,[XMLNode[ELEMENT,Code,null,null,null,[XMLNode[TEXT,null,null,null,null,null,NoSuchKey,]],null,], XMLNode[ELEMENT,Message,null,null,null,[XMLNode[TEXT,null,null,null,null,null,The specified key does not exist.,]],null,], XMLNode[ELEMENT,Key,null,null,null,[XMLNode[TEXT,null,null,null,null,null,00Q17000008LRcAEAW/*,]],null,], XMLNode[ELEMENT,RequestId,null,null,null,[XMLNode[TEXT,null,null,null,null,null,some_req_id,]],null,], XMLNode[ELEMENT,HostId,null,null,null,[XMLNode[TEXT,null,null,null,null,null,some_host_id,]],null,]],null,]

我无法列出整个存储桶,因为它对于1000键的限制来说太大了。如何列出文件夹?

迈克尔-SQLbot

有关S3的期望,请参阅S3文档中的“列表对象,V1V2 ”。

简而言之,您必须/在查询字符串中而不是路径中提供前缀和分隔符(几乎总是)。对于对象列表,路径始终是存储桶的根,例如:

https://dxxxexample.cloudfront.net/?delimiter=/&prefix=00Q17000008LRcAEAW/&...

这也意味着,如果您为分发定义默认的根对象,则也无法通过分发拉目录列表。在这种情况下,您需要第二个发行版,或者您需要直接从S3获取对象列表。

无论如何,请记住,对象列表相对昂贵,是GET请求价格的10倍以上,因此,如果缓存响应是有意义的,则使用CloudFront来获取它们可能是有意义的,或者您可能想要做完全不同的事情,例如对象列表。我一直在使用S3事件通知,Lambda和RDS进行设置,以将所有对象及其元数据存储在单独的近实时数据库中,在此数据库中我可以获得更快,更完整的清单,而无需付出任何代价(并且我可以根据对象的元数据搜索对象)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

S3 / Cloudfront:如何在存储桶中列出文件夹的内容

来自分类Dev

在AWS S3存储桶的特定“文件夹”中列出文件

来自分类Dev

如何在Amazon S3存储桶中创建新文件夹?

来自分类Dev

您可以列出S3存储桶中的所有文件夹吗?

来自分类Dev

PowerShell for AWS:仅列出S3存储桶中的“文件夹”吗?

来自分类Dev

如何在使用Cloudfront上传的S3存储桶中获取文件?

来自分类Dev

如何在使用Cloudfront上传的S3存储桶中获取文件?

来自分类Dev

如何使用Terraform在Amazon S3存储桶中创建文件夹

来自分类Dev

如何使用PHP在S3存储桶中创建文件夹

来自分类Dev

Amazon S3:如何获取存储桶中的文件夹列表?

来自分类Dev

Presto:如何从s3中读取在子文件夹中分区的整个存储桶?

来自分类Dev

Mule ESB:如何获取所有存储在Amazon S3存储桶内的文件夹中的文件(获取对象内容)

来自分类Dev

S3存储桶文件夹的DNS名称

来自分类Dev

如何在GDrive v3的快捷方式文件夹中列出文件

来自分类Dev

如何将Kinesis流存储到S3存储桶中特定文件夹结构中的S3存储中

来自分类Dev

亚马逊s3,将文件上传到存储桶中的文件夹中

来自分类Dev

删除位于Amazon S3上存储桶中的子文件夹中的文件

来自分类Dev

使用API在Amazon S3存储桶中创建文件夹/上传文件

来自分类Dev

仅从s3存储桶文件夹中获取文件名

来自分类Dev

在 Laravel 中压缩和下载 Amazon S3 存储桶文件和文件夹

来自分类Dev

用于将存储桶中特定文件夹的“内容类型”设置为“应用程序/pdf”的 Amazon S3 存储桶策略

来自分类Dev

将 AWS S3 存储桶根目录内容复制到子文件夹中的同一个存储桶

来自分类Dev

如何从Glacier将文件夹(或整个存储桶)还原到Amazon S3?

来自分类Dev

如何通过python脚本在s3存储桶上创建文件夹?

来自分类Dev

使用Cloudformation在S3存储桶中创建文件夹

来自分类Dev

在S3存储桶的子文件夹中托管index.html

来自分类Dev

在S3存储桶中创建子文件夹?

来自分类Dev

使用 python boto 仅下载 S3 存储桶中的特定文件夹

来自分类Dev

如何为Amazon S3存储桶中的每个文件夹执行命令(如副本)?

Related 相关文章

  1. 1

    S3 / Cloudfront:如何在存储桶中列出文件夹的内容

  2. 2

    在AWS S3存储桶的特定“文件夹”中列出文件

  3. 3

    如何在Amazon S3存储桶中创建新文件夹?

  4. 4

    您可以列出S3存储桶中的所有文件夹吗?

  5. 5

    PowerShell for AWS:仅列出S3存储桶中的“文件夹”吗?

  6. 6

    如何在使用Cloudfront上传的S3存储桶中获取文件?

  7. 7

    如何在使用Cloudfront上传的S3存储桶中获取文件?

  8. 8

    如何使用Terraform在Amazon S3存储桶中创建文件夹

  9. 9

    如何使用PHP在S3存储桶中创建文件夹

  10. 10

    Amazon S3:如何获取存储桶中的文件夹列表?

  11. 11

    Presto:如何从s3中读取在子文件夹中分区的整个存储桶?

  12. 12

    Mule ESB:如何获取所有存储在Amazon S3存储桶内的文件夹中的文件(获取对象内容)

  13. 13

    S3存储桶文件夹的DNS名称

  14. 14

    如何在GDrive v3的快捷方式文件夹中列出文件

  15. 15

    如何将Kinesis流存储到S3存储桶中特定文件夹结构中的S3存储中

  16. 16

    亚马逊s3,将文件上传到存储桶中的文件夹中

  17. 17

    删除位于Amazon S3上存储桶中的子文件夹中的文件

  18. 18

    使用API在Amazon S3存储桶中创建文件夹/上传文件

  19. 19

    仅从s3存储桶文件夹中获取文件名

  20. 20

    在 Laravel 中压缩和下载 Amazon S3 存储桶文件和文件夹

  21. 21

    用于将存储桶中特定文件夹的“内容类型”设置为“应用程序/pdf”的 Amazon S3 存储桶策略

  22. 22

    将 AWS S3 存储桶根目录内容复制到子文件夹中的同一个存储桶

  23. 23

    如何从Glacier将文件夹(或整个存储桶)还原到Amazon S3?

  24. 24

    如何通过python脚本在s3存储桶上创建文件夹?

  25. 25

    使用Cloudformation在S3存储桶中创建文件夹

  26. 26

    在S3存储桶的子文件夹中托管index.html

  27. 27

    在S3存储桶中创建子文件夹?

  28. 28

    使用 python boto 仅下载 S3 存储桶中的特定文件夹

  29. 29

    如何为Amazon S3存储桶中的每个文件夹执行命令(如副本)?

热门标签

归档