本文介紹如何列舉指定存儲空間(Bucket)下的所有文件(Object)、指定前綴的文件、指定目錄下的文件和子目錄等。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見OSS訪問域名、數據中心、開放端口。
本文以從環境變量讀取訪問憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見初始化。
要列舉文件,您必須有
oss:ListObjects
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。2.2.5及更高版本的OSS Go SDK支持返回RestoreInfo信息。
背景信息
您可以選擇調用 ListObjectsV2
或 ListObjects
接口來一次性列舉某個Bucket下最多1000個Object。通過指定不同的參數,您可以實現多種列舉功能,例如列舉指定起始位置之后的所有文件、列舉指定目錄下的文件和子目錄,以及對列舉結果進行分頁處理。這兩個接口的主要區別在于:
使用
ListObjectsV2
接口時,您需要通過fetchOwner
參數來指定是否在返回的結果中包含Object的Owner信息。使用
ListObjects
接口時,默認會在返回的結果中包含Object的Owner信息。說明對于開啟版本控制的Bucket,建議使用ListObjectsV2接口列舉文件。
以下分別介紹通過ListObjectsV2以及ListObjects方法列舉文件時涉及的參數說明。
ListObjectsV2
通過ListObjectsV2方法列舉文件,涉及參數說明如下:
參數 | 描述 |
prefix | 限定返回的文件必須以prefix作為前綴。 |
delimiter | 對文件名稱進行分組的一個字符。所有名稱包含指定的前綴且第一次出現delimiter字符之間的文件作為一組元素(commonPrefixes)。 |
startAfter | 此次列舉文件的起點。 |
fetchOwner | 指定是否在返回結果中包含Owner信息。
|
更多信息,請參見ListObjectsV2。
ListObjects
通過ListObjects方法列舉文件,涉及參數說明如下:
參數 | 說明 |
delimiter | 對文件名稱進行分組的一個字符。所有名稱包含指定的前綴且第一次出現delimiter字符之間的文件作為一組元素(commonPrefixes)。 |
prefix | 限定返回的文件必須以prefix作為前綴。 |
maxKeys | 限定此次列舉文件的最大個數。默認值為100,最大值為1000。 |
marker | 此次列舉文件的起點。 |
更多信息,請參見ListObjects。
示例代碼
ListObjectsV2
通過 ListObjectsV2方法列舉指定Bucket下的100個文件的示例代碼如下:
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 初始的繼續標記
continueToken := ""
for {
// 列舉所有文件
lsRes, err := bucket.ListObjectsV2(oss.ContinuationToken(continueToken))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果還有更多對象需要列舉,則更新繼續標記并繼續循環。
if lsRes.IsTruncated {
continueToken = lsRes.NextContinuationToken
} else {
break
}
}
log.Println("All objects have been listed.")
}
ListObjects
通過ListObjects方法列舉指定Bucket下的100個文件的示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 列舉所有文件。
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.Marker(marker))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
for _, object := range lsRes.Objects {
log.Printf("Object Name: %s\n", object.Key)
}
// 如果還有更多對象需要列舉,則更新marker并繼續循環。
if lsRes.IsTruncated {
marker = lsRes.NextMarker
} else {
break
}
}
log.Println("All objects have been listed.")
}
常見使用場景
列舉指定個數的文件
ListObjectsV2
通過 ListObjectsV2 方法列舉指定個數文件的示例代碼如下:
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 通過MaxKeys設置文件列舉的最大個數,并列舉文件。
maxKeys := 200
continueToken := ""
for {
lsRes, err := bucket.ListObjectsV2(oss.MaxKeys(maxKeys), oss.StartAfter(continueToken))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s, Owner ID: %s, Owner DisplayName: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass, object.Owner.ID, object.Owner.DisplayName)
}
// 如果還有更多對象需要列舉,則更新繼續標記并繼續循環。
if lsRes.IsTruncated {
continueToken = lsRes.ContinuationToken
} else {
break
}
}
log.Println("All objects have been listed.")
}
ListObjects
通過 ListObjects方法列舉指定個數文件的示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 設置列舉文件的最大個數,并列舉文件。
maxKeys := 200
lsRes, err := bucket.ListObjects(oss.MaxKeys(maxKeys))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects:\n", len(lsRes.Objects))
for _, object := range lsRes.Objects {
log.Printf("Object: %s\n", object.Key)
}
if lsRes.IsTruncated {
log.Printf("More objects available. NextMarker: %s\n", lsRes.NextMarker)
} else {
log.Println("All objects have been listed.")
}
}
列舉指定前綴的文件
ListObjectsV2
通過ListObjectsV2方法列舉指定前綴的文件的示例代碼如下:
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 通過Prefix參數設置列舉的文件前綴為my-object-。
prefix := "my-object-"
lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects with prefix '%s':\n", len(lsRes.Objects), prefix)
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s, Owner ID: %s, Owner DisplayName: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass, object.Owner.ID, object.Owner.DisplayName)
}
if lsRes.IsTruncated {
log.Printf("More objects available. Next Continuation Token: %s\n", lsRes.NextContinuationToken)
} else {
log.Println("All objects have been listed.")
}
}
ListObjects
通過ListObjects方法列舉指定前綴的文件的示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 列舉包含指定前綴的文件。默認列舉100個文件。
prefix := "my-object-"
lsRes, err := bucket.ListObjects(oss.Prefix(prefix))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects with prefix '%s':\n", len(lsRes.Objects), prefix)
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s\n", object.Key)
}
if lsRes.IsTruncated {
log.Printf("More objects available. Next Marker: %s\n", lsRes.NextMarker)
} else {
log.Println("All objects have been listed.")
}
}
列舉指定起始位置之后的文件
ListObjectsV2
通過設置StartAfter參數可以指定列舉的起始位置,返回StartAfter字典序后的所有文件。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 指定列舉StartAfter之后的文件。默認列舉100個文件。
startAfter := "my-object-"
lsRes, err := bucket.ListObjectsV2(oss.StartAfter(startAfter))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects starting after '%s':\n", len(lsRes.Objects), startAfter)
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s, Owner ID: %s, Owner DisplayName: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass, object.Owner.ID, object.Owner.DisplayName)
}
if lsRes.IsTruncated {
log.Printf("More objects available. Next Continuation Token: %s\n", lsRes.NextContinuationToken)
} else {
log.Println("All objects have been listed.")
}
}
ListObjects
通過設置Marker參數指定列舉的起始位置,返回Marker字典序后的所有文件。
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 初始化marker
marker := ""
// 循環列舉所有對象
for {
lsRes, err := bucket.ListObjects(oss.Marker(marker))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects:\n", len(lsRes.Objects))
for _, object := range lsRes.Objects {
log.Printf("Object: %s\n", object.Key)
}
// 如果結果被截斷,則更新marker并繼續循環
if lsRes.IsTruncated {
marker = lsRes.NextMarker
} else {
break
}
}
log.Println("All objects have been listed.")
}
分頁列舉所有文件
ListObjectsV2
通過ListObjectsV2方法列舉分頁列舉指定Bucket下的所有文件。每頁列舉的文件個數通過MaxKeys指定。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉所有文件。每頁列舉100個。
continueToken := ""
for {
lsRes, err := bucket.ListObjectsV2(oss.MaxKeys(100), oss.ContinuationToken(continueToken))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects:\n", len(lsRes.Objects))
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lsRes.IsTruncated {
continueToken = lsRes.NextContinuationToken
} else {
break
}
}
log.Println("All objects have been listed.")
}
ListObjects
通過ListObjects方法列舉分頁列舉指定Bucket下的所有文件。每頁列舉的文件個數通過MaxKeys指定。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉所有文件。每頁列舉100個。
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(100), oss.Marker(marker))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects:\n", len(lsRes.Objects))
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lsRes.IsTruncated {
marker = lsRes.NextMarker
} else {
break
}
}
log.Println("All objects have been listed.")
}
分頁列舉指定前綴的文件
ListObjectsV2
通過ListObjectsV2方法分頁列舉指定前綴的文件。每頁列舉的文件個數通過MaxKeys指定。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉指定前綴的文件。每頁列舉80個。
prefix := "my-object-"
continueToken := ""
for {
lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.MaxKeys(80), oss.ContinuationToken(continueToken))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects with prefix '%s':\n", len(lsRes.Objects), prefix)
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lsRes.IsTruncated {
continueToken = lsRes.NextContinuationToken
} else {
break
}
}
log.Println("All objects have been listed.")
}
ListObjects
通過ListObjects方法分頁列舉指定前綴的文件。每頁列舉的文件個數通過MaxKeys指定。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉包含指定前綴的文件。每頁列舉80個。
prefix := "my-object-"
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(80), oss.Marker(marker), oss.Prefix(prefix))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。默認情況下,一次返回100條記錄。
log.Printf("Found %d objects with prefix '%s':\n", len(lsRes.Objects), prefix)
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新marker并繼續循環
if lsRes.IsTruncated {
marker = lsRes.NextMarker
} else {
break
}
}
log.Println("All objects have been listed.")
}
列舉指定目錄下所有文件的信息
ListObjectsV2
通過ListObjectsV2方法列舉指定前綴(目錄)下所有文件的信息,包括文件大小、文件最后修改時間以及文件名等。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉包含指定前綴的文件。默認情況下,一次返回100條記錄。
continueToken := ""
prefix := "fun"
for {
lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.ContinuationToken(continueToken))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lsRes.IsTruncated {
continueToken = lsRes.NextContinuationToken
} else {
break
}
}
log.Println("All objects have been listed.")
}
ListObjects
通過ListObjects方法列舉指定前綴(目錄)下所有文件的信息,包括文件大小、文件最后修改時間以及文件名等。
package main
import (
"log"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 遍歷文件。
marker := ""
prefix := "test"
for {
lor, err := bucket.ListObjects(oss.Marker(marker), oss.Prefix(prefix))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。
for _, object := range lor.Objects {
log.Printf("Object Key: %s, Type: %s, Size: %d, ETag: %s, LastModified: %s, StorageClass: %s\n",
object.Key, object.Type, object.Size, object.ETag, object.LastModified.Format(time.RFC3339), object.StorageClass)
}
// 如果結果被截斷,則更新marker并繼續循環
if lor.IsTruncated {
marker = lor.NextMarker
} else {
break
}
}
log.Println("All objects have been listed.")
}
列舉指定目錄下所有子目錄的信息
ListObjectsV2
通過ListObjectsV2方法列舉指定前綴(目錄)下所有子目錄信息的示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉包含指定前綴的文件夾。默認情況下,一次返回100條記錄。
continueToken := ""
prefix := ""
for {
lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.ContinuationToken(continueToken), oss.Delimiter("/"))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。
for _, dirName := range lsRes.CommonPrefixes {
log.Println("Directory Name:", dirName)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lsRes.IsTruncated {
continueToken = lsRes.NextContinuationToken
} else {
break
}
}
log.Println("All directories have been listed.")
}
ListObjects
通過ListObjects方法列舉指定前綴(目錄)下所有子目錄信息的示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 分頁列舉包含指定前綴的文件夾。默認情況下,一次返回100條記錄。
marker := ""
prefix := "yourDirPrefix" // 請替換為實際的前綴
for {
lor, err := bucket.ListObjects(oss.Marker(marker), oss.Prefix(prefix), oss.Delimiter("/"))
if err != nil {
log.Fatalf("Failed to list objects: %v", err)
}
// 打印列舉結果。
for _, dirName := range lor.CommonPrefixes {
log.Println("Directory Name:", dirName)
}
// 如果結果被截斷,則更新繼續標記并繼續循環
if lor.IsTruncated {
marker = lor.NextMarker
} else {
break
}
}
log.Println("All directories have been listed.")
}
列舉文件并返回Owner信息
通過ListObjectsV2方法列舉文件并返回Owner信息示例代碼如下:
package main
import (
"log"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// 創建OSSClient實例。
// yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。
// yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// 填寫存儲空間名稱。
bucketName := "yourBucketName" // 請替換為實際的Bucket名稱
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// 獲取Owner信息,并列舉對象。
lsRes, err := bucket.ListObjectsV2(oss.FetchOwner(true))
if err != nil {
log.Fatalf("Failed to list objects with owner information: %v", err)
}
// 打印列舉結果,默認情況下一次返回100條記錄。
for _, object := range lsRes.Objects {
log.Printf("Object Key: %s, Owner ID: %s, Display Name: %s\n",
object.Key, object.Owner.ID, object.Owner.DisplayName)
}
log.Println("All objects have been listed.")
}
文件夾
OSS沒有文件夾的概念,所有元素都是以文件來存儲。創建文件夾本質上來說是創建了一個大小為0并以正斜線(/)結尾的文件。這個文件可以被上傳和下載,控制臺會對以正斜線(/)結尾的文件以文件夾的方式展示。關于創建文件夾的完整示例代碼,請參見GitHub示例。
通過delimiter和prefix兩個參數可以模擬文件夾功能:
如果設置prefix為某個文件夾名稱,則會列舉以此prefix開頭的文件,即該文件夾下所有的文件和子文件夾(目錄)均顯示為objects。
如果在設置了prefix的情況下,將delimiter設置為正斜線(/),則只列舉該文件夾下的文件和子文件夾(目錄),該文件夾下的子文件夾(目錄)顯示為CommonPrefixes,子文件夾下的文件和文件夾不顯示。
假設存儲空間中包含文件oss.jpg
、fun/test.jpg
、fun/movie/001.avi
和fun/movie/007.avi
,以正斜線(/)作為文件夾的分隔符。以下示例說明了如何通過模擬文件夾的方式列舉文件。
列舉存儲空間下的所有文件
ListObjectsV2
通過ListObjectsV2列舉指定存儲空間下所有文件的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定存儲空間下所有文件。 startAfter := "" continueToken := "" for { lsRes, err := bucket.ListObjectsV2(oss.StartAfter(startAfter), oss.ContinuationToken(continueToken)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印列舉結果,默認情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { startAfter = lsRes.StartAfter continueToken = lsRes.NextContinuationToken } else { break } } log.Println("All objects have been listed.") }
ListObjects
通過ListObjects方法列舉存儲空間下的所有文件的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定存儲空間下所有文件。 marker := "" for { lsRes, err := bucket.ListObjects(oss.Marker(marker)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印列舉結果,默認情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { marker = lsRes.NextMarker } else { break } } log.Println("All objects have been listed.") }
通過以上兩種方法列舉指定存儲空間下所有文件的返回結果如下。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg oss.jpg CommonPrefixes:
列舉指定目錄下所有文件
ListObjectsV2
通過ListObjectsV2方法列舉指定目錄下的所有文件的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定目錄下的所有文件。 prefix := "aaa/db-init" continueToken := "" for { lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.ContinuationToken(continueToken)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印列舉結果,默認情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { continueToken = lsRes.NextContinuationToken } else { break } } log.Println("All objects have been listed.") }
ListObjects
通過ListObjects方法列舉指定目錄下的所有文件的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定目錄下的所有文件。 prefix := "aaa/db-init" // 請替換為實際的前綴 marker := "" for { lsRes, err := bucket.ListObjects(oss.Prefix(prefix), oss.Marker(marker)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印列舉結果,默認情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { marker = lsRes.NextMarker } else { break } } log.Println("All objects have been listed.") }
通過以上兩種方法列舉指定目錄下所有文件的返回結果如下。
Objects: fun/movie/001.avi fun/movie/007.avi fun/test.jpg CommonPrefixes:
列舉目錄下的文件和子目錄
ListObjectsV2
通過ListObjectsV2方法列舉目錄下的文件和子目錄的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定目錄下的文件和子目錄。 prefix := "" // 可以根據需要設置前綴 delimiter := "/" continueToken := "" for { lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.Delimiter(delimiter), oss.ContinuationToken(continueToken)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印列舉結果,默認情況下一次返回100條記錄。 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 打印子目錄。 for _, commonPrefix := range lsRes.CommonPrefixes { log.Printf("Common Prefix: %s\n", commonPrefix) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { continueToken = lsRes.NextContinuationToken } else { break } } log.Println("All objects and subdirectories have been listed.") }
ListObjects
通過ListObjects方法列舉目錄下的文件和子目錄的示例如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 列舉指定目錄下的文件和子目錄。 prefix := "aaa/db-init/" // 請替換為實際的前綴 marker := "" delimiter := "/" for { lsRes, err := bucket.ListObjects(oss.Prefix(prefix), oss.Marker(marker), oss.Delimiter(delimiter)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印文件列表 for _, object := range lsRes.Objects { log.Printf("Object Key: %s\n", object.Key) } // 打印子目錄列表 for _, commonPrefix := range lsRes.CommonPrefixes { log.Printf("Common Prefix: %s\n", commonPrefix) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { marker = lsRes.NextMarker } else { break } } log.Println("All objects and subdirectories have been listed.") }
通過以上兩種方法列舉指定目錄下的文件和子目錄的返回結果如下:
Objects: fun/test.jpg CommonPrefixes: fun/movie/
獲取指定目錄下的文件大小
ListObjectsV2
通過ListObjectsV2方法獲取指定目錄下的文件大小的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 獲取存儲空間。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 獲取指定目錄下的文件大小。 prefix := "/fun" // 請替換為實際的前綴 continueToken := "" for { lsRes, err := bucket.ListObjectsV2(oss.Prefix(prefix), oss.ContinuationToken(continueToken)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印文件列表及其大小 for _, object := range lsRes.Objects { log.Printf("Object Key: %s, Size: %d Byte(s)\n", object.Key, object.Size) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { continueToken = lsRes.NextContinuationToken } else { break } } log.Println("All objects have been listed with their sizes.") }
ListObjects
通過ListObjects方法獲取指定目錄下的文件大小的示例代碼如下:
package main import ( "log" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) func main() { // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { log.Fatalf("Failed to create credentials provider: %v", err) } // 創建OSSClient實例。 // yourEndpoint填寫Bucket對應的Endpoint,以華東1(杭州)為例,填寫為https://oss-cn-hangzhou.aliyuncs.com。其它Region請按實際情況填寫。 // yourRegion填寫Bucket所在地域,以華東1(杭州)為例,填寫為cn-hangzhou。其它Region請按實際情況填寫。 client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.Region("yourRegion"), oss.AuthVersion(oss.AuthV4)) if err != nil { log.Fatalf("Failed to create OSS client: %v", err) } // 填寫存儲空間名稱。 bucketName := "yourBucketName" // 請替換為實際的Bucket名稱 bucket, err := client.Bucket(bucketName) if err != nil { log.Fatalf("Failed to get bucket: %v", err) } // 獲取指定目錄下的文件大小。 prefix := "test/" // 請替換為實際的前綴 marker := "" for { lsRes, err := bucket.ListObjects(oss.Prefix(prefix), oss.Marker(marker)) if err != nil { log.Fatalf("Failed to list objects: %v", err) } // 打印文件列表及其大小 for _, object := range lsRes.Objects { log.Printf("Object Key: %s, Size: %d Byte(s)\n", object.Key, object.Size) } // 如果結果被截斷,則更新繼續標記并繼續循環 if lsRes.IsTruncated { marker = lsRes.NextMarker } else { break } } log.Println("All objects have been listed with their sizes.") }
常見問題
列舉文件時是否支持按文件最后一次修改時間進行排序?
不支持。如果您需要按照文件最后一次修改時間進行排序,建議使用數據索引功能。更多信息,請參見數據索引。
相關文檔
關于列舉文件的完整示例代碼,請參見GitHub示例。
關于列舉文件的API接口說明,請參見ListObjectsV2和ListObjects。