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

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

文件夹模拟功能

OSS服务是没有文件夹这个概念的,所有元素都是以Object来存储。创建模拟文件夹本质上来说是创建了一个size为0的Object。对于这个Object照样可以上传下载,只是控制台会对以“/”结尾的Object以文件夹的方式展示。所以您可以使用上述方式来实现创建模拟文件夹。

您可以通过 Delimiter 和 Prefix 参数的配合模拟出文件夹功能。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
1. 列出第一层目录和文件
根据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/”下的文件名不显示。
2. 列出第二层目录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/”。而目录下的文件名不会被显示。

功能使用参考