查看對象列表即列出您在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/”。而目錄下的檔案名不會被顯示。

功能使用參考