您可以通过 OSS API 中的 GetBucket 接口列出您在存储空间(Bucket)中上传的文件(Object)。

说明 查看文件列表的 API 详细信息请参考 GetBucket

您可以调用通过 GetBucket 接口,一次性得到某一 Bucket 下最多 1000 个 Object 的列表。通过下面的四个参数,您可以实现多种列举功能:

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

操作方式

操作方式 说明
控制台 可在控制台对应 Bucket 的文件管理内直接查看
图形化工具 ossbrowser 图形化工具,易操作
命令行工具 ossutil 命令行工具,性能好
Java SDK 丰富、完整的各类语言 SDK demo
Python SDK
PHP SDK
Go SDK
C SDK
.NET SDK
Node.js SDK
Browser.js SDK
Ruby SDK

文件夹功能

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

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

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

示例:

在名为 oss-sample 的 Bucket 下有如下 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/”。而目录下的文件名不会被显示。