查看對象列表即列出您在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/”。而目錄下的檔案名不會被顯示。
功能使用參考
- API:Get Bucket
- SDK:Java SDK-列出儲存空間中的檔案