S3允许父文件夹的公共目录列表?

时间:2017-05-01 18:47:52

标签: amazon-web-services amazon-s3

我目前拥有其中一个S3存储桶的公共权限,如下所示:

{
    "Version": "2012-10-17",
    "Id": "Policy1493660686651",
    "Statement": [
        {
            "Sid": "Stmt1493660682556",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::polodata/*"
        }
    ]
}

当用户导航到特定文件时,如:https://s3-us-west-2.amazonaws.com/polodata/ETHBTC.csv,它会提示用户下载 - 这很好。但是,当他们导航到:https://s3-us-west-2.amazonaws.com/polodata/(未指定文件)时,它会返回一个XML页面。

我需要更改什么才能让后者返回目录列表页面?

1 个答案:

答案 0 :(得分:2)

访问网址时,您无法从Amazon S3获取目录列表页。最接近的是XML对象列表,您必须为其授予对存储桶策略的ListObjects权限。它看起来像这样:

此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>my-bucket</Name>
  <Prefix/>
  <Marker/>
  <MaxKeys>1000</MaxKeys>
  <IsTruncated>false</IsTruncated>
  <Contents>
    <Key>foo.txt</Key>
    <LastModified>2017-05-01T21:07:13.000Z</LastModified>
    <ETag>"9311482f31be49fb2f41be9e16097a9c"</ETag>
    <Size>213</Size>
    <StorageClass>STANDARD</StorageClass>
  </Contents>
  <Contents>
    <Key>my-folder/</Key>
    <LastModified>2017-05-01T21:07:18.000Z</LastModified>
    <ETag>"d41d8cd98f00b204e9800998ecf8427e"</ETag>
    <Size>0</Size>
    <StorageClass>STANDARD</StorageClass>
  </Contents>
  <Contents>
    <Key>my-folder/bar.txt</Key>
    <LastModified>2017-05-01T21:07:30.000Z</LastModified>
    <ETag>"9311482f31be49fb2f41be9e16097a9c"</ETag>
    <Size>213</Size>
    <StorageClass>STANDARD</StorageClass>
  </Contents>
</ListBucketResult>

有些人想出了模拟目录列表的创造性方法,例如:Directory Listing in S3 Static Website

请记住 - Amazon S3不是传统的Web服务器。它是对象存储服务,也可以向Internet提供内容。因此,它的行为与普通的Web服务器完全不同。

另请参阅:How Do I Configure an S3 Bucket for Static Website Hosting?