查看文件列表即列出您在Bucket中上传的Object。您可以通过OSS的接口调用一次性得到某一Bucket下最多1000个Object的列表。通过下面的四个参数,您可以实现多种列举功能:

名称 作用
Delimiter 用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现Delimiter字符之间的Object作为一组元素:CommonPrefixes。
Marker 设定结果从Marker之后按字母排序的第一个开始返回。
MaxKeys 限定此次返回Object的最大数。默认为100,最大值为1000。
Prefix 限定返回的Object key必须以Prefix作为前缀。注意使用Prefix查询时,返回的key中仍会包含Prefix。

文件夹功能

OSS服务是没有文件夹这个概念的,所有元素都是以Object来存储。创建模拟文件夹本质上来说是创建了一个大小为0的Object。这个Object可以被上传和下载,只是控制台会对以正斜线(/)结尾的Object以文件夹的方式展示。所以您可以使用上述方式来创建文件夹。

您可以通过 Delimiter 和 Prefix 参数的配合实现文件夹功能:

  • 如果把 Prefix 设为某个文件夹名,就可以罗列以此 Prefix 开头的文件,即该文件夹下递归的所有的文件和子文件夹(目录)。文件名在Contents中显示。
  • 如果再把 Delimiter 设置为正斜线(/)时,返回值就只罗列该文件夹下的文件和子文件夹(目录),该文件夹下的子文件名(目录)返回在 CommonPrefixes 部分,子文件夹下递归的文件和文件夹不被显示。

举个例子:

在OSS的Bucket oss-sample下有如下Object:
文件D
目录A/文件C
目录A/文件D
目录A/目录B/文件B
目录A/目录B/目录C/文件A
目录A/目录C/文件A
目录A/目录D/文件B
目录B/文件A
  • 列出第一层目录和文件
    根据API中请求约定,需要设置Prefix为“”,Delimiter为“/”。返回结果如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <ListBucketResult>
      <Name>oss-sample</Name>
      <Prefix></Prefix>
      <Marker></Marker>
      <MaxKeys>1000</MaxKeys>
      <Delimiter>/</Delimiter>
      <IsTruncated>false</IsTruncated>
      <Contents>
        <Key>文件D</Key>
        <LastModified>2015-11-06T10:07:11.000Z</LastModified>
        <ETag>"8110930DA5E04B1ED5D84D6CC4DC9080"</ETag>
        <Type>Normal</Type>
        <Size>3340</Size>
        <StorageClass>Standard</StorageClass>
        <Owner>
          <ID>oss</ID>
          <DisplayName>oss</DisplayName>
        </Owner>
      </Contents>
      <CommonPrefixes>
        <Prefix>目录A/</Prefix>
      </CommonPrefixes>
      <CommonPrefixes>
        <Prefix>目录B/</Prefix>
      </CommonPrefixes>
    </ListBucketResult>

    可以看到:

    Contents返回的是第一层的文件:“文件D”。 CommonPrefixes返回的是第一层的目录:“目录A/” 和 “目录B/”,而“目录A/” 和 “目录B/”下的文件名不显示。

  • 列出第二层目录A底下的目录和文件
    根据API中请求约定,需要设置Prefix为“目录A”,Delimiter为“/”。返回结果如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <ListBucketResult>
      <Name>oss-sample</Name>
      <Prefix>目录A/</Prefix>
      <Marker></Marker>
      <MaxKeys>1000</MaxKeys>
      <Delimiter>/</Delimiter>
      <IsTruncated>false</IsTruncated>
      <Contents>
        <Key>目录A/文件C</Key>
        <LastModified>2015-11-06T09:36:00.000Z</LastModified>
        <ETag>"B026324C6904B2A9CB4B88D6D61C81D1"</ETag>
        <Type>Normal</Type>
        <Size>2</Size>
        <StorageClass>Standard</StorageClass>
        <Owner>
          <ID>oss</ID>
          <DisplayName>oss</DisplayName>
        </Owner>
      </Contents>
      <Contents>
        <Key>目录A/文件D</Key>
        <LastModified>2015-11-06T09:36:00.000Z</LastModified>
        <ETag>"B026324C6904B2A9CB4B88D6D61C81D1"</ETag>
        <Type>Normal</Type>
        <Size>2</Size>
        <StorageClass>Standard</StorageClass>
        <Owner>
          <ID>oss</ID>
          <DisplayName>oss</DisplayName>
        </Owner>
      </Contents>
      <CommonPrefixes>
        <Prefix>目录A/目录B/</Prefix>
      </CommonPrefixes>
      <CommonPrefixes>
        <Prefix>目录A/目录C/</Prefix>
      </CommonPrefixes>
      <CommonPrefixes>
        <Prefix>目录A/目录D/</Prefix>
      </CommonPrefixes>
    </ListBucketResult>

    可以看到:

    Contents返回的是第二层的文件:“目录A/文件C”,“目录A/文件D”。 CommonPrefixes返回的是第一层的目录:“目录A/目录B/”,“目录A/目录C/”和“目录A/目录D/”。而目录下的文件名不会被显示。

功能使用参考