本文介绍如何列举文件。

OSS文件按照字母顺序排列。您可以通过Bucket.ListObjects列出存储空间下的文件。主要的参数如下:

参数说明
delimiter对文件名称进行分组的一个字符。所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素(commonPrefixes)。
prefix限定返回的文件必须以prefix作为前缀。
maxKeys限定此次列举文件的最大个数。默认值为100,最大值为1000。
marker列举指定marker之后的文件。

ListObjects的完整代码请参见Github

简单列举文件

您可以使用默认参数获取存储空间的文件列表,默认返回100条记录。代码如下:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func HandleError(err error) {
  8. fmt.Println("Error:", err)
  9. os.Exit(-1)
  10. }
  11. func main() {
  12. // 创建OSSClient实例。
  13. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  14. if err != nil {
  15. HandleError(err)
  16. }
  17. // 获取存储空间。
  18. bucketName := "<yourBucketName>"
  19. bucket, err := client.Bucket(bucketName)
  20. if err != nil {
  21. HandleError(err)
  22. }
  23. // 列举所有文件。
  24. marker := ""
  25. for {
  26. lsRes, err := bucket.ListObjects(oss.Marker(marker))
  27. if err != nil {
  28. HandleError(err)
  29. }
  30. // 打印列举文件,默认情况下一次返回100条记录。
  31. for _, object := range lsRes.Objects {
  32. fmt.Println("Bucket: ", object.Key)
  33. }
  34. if lsRes.IsTruncated {
  35. marker = lsRes.NextMarker
  36. } else {
  37. break
  38. }
  39. }
  40. }

列举指定个数的文件

以下代码用于列举指定个数的文件:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 设置列举文件的最大个数,并列举文件。
  22. lsRes, err := bucket.ListObjects(oss.MaxKeys(200))
  23. if err != nil {
  24. fmt.Println("Error:", err)
  25. os.Exit(-1)
  26. }
  27. // 打印结果。
  28. fmt.Println("Objects:", lsRes.Objects)
  29. for _, object := range lsRes.Objects {
  30. fmt.Println("Object:", object.Key)
  31. }
  32. }

列举指定前缀的文件

以下代码用于列举包含指定前缀(prefix)的文件:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 列举包含指定前缀的文件。默认列举100个文件。
  22. lsRes, err := bucket.ListObjects(oss.Prefix("my-object-"))
  23. if err != nil {
  24. fmt.Println("Error:", err)
  25. os.Exit(-1)
  26. }
  27. // 打印结果。
  28. fmt.Println("Objects:", lsRes.Objects)
  29. for _, object := range lsRes.Objects {
  30. fmt.Println("Object:", object.Key)
  31. }
  32. }

列举指定marker之后的文件

参数marker代表文件名称。以下代码用于列举指定marker之后的文件:

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 列举指定marker之后的文件。默认列举100个文件。
  22. lsRes, err := bucket.ListObjects(oss.Marker("my-object-xx"))
  23. if err != nil {
  24. fmt.Println("Error:", err)
  25. os.Exit(-1)
  26. }
  27. // 打印结果。
  28. fmt.Println("Objects:", lsRes.Objects)
  29. for _, object := range lsRes.Objects {
  30. fmt.Println("Object:", object.Key)
  31. }
  32. }

分页列举所有文件

以下代码用于分页列举指定存储空间下的所有文件。每页列举的文件个数通过maxKeys指定。

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 分页列举所有文件。每页列举200个。
  22. marker := oss.Marker("")
  23. for {
  24. lsRes, err := bucket.ListObjects(oss.MaxKeys(200), marker)
  25. if err != nil {
  26. fmt.Println("Error:", err)
  27. os.Exit(-1)
  28. }
  29. marker = oss.Marker(lsRes.NextMarker)
  30. fmt.Println("Objects:", lsRes.Objects)
  31. if !lsRes.IsTruncated {
  32. break
  33. }
  34. }
  35. }

分页列举指定marker之后的文件

以下代码用于分页列举指定maker之后的文件。每页列举的文件个数通过maxKeys指定。

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 分页列举指定maker之后的文件。每页列举200个。
  22. marker = oss.Marker("my-object-xx")
  23. for {
  24. lsRes, err := bucket.ListObjects(oss.MaxKeys(50), marker)
  25. if err != nil {
  26. fmt.Println("Error:", err)
  27. os.Exit(-1)
  28. }
  29. marker = oss.Marker(lsRes.NextMarker)
  30. fmt.Println("Objects:", lsRes.Objects)
  31. if !lsRes.IsTruncated {
  32. break
  33. }
  34. }
  35. }

分页列举指定前缀的文件

以下代码用于分页列举包含指定前缀的文件。每页列举的文件个数通过maxKeys指定。

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  6. )
  7. func main() {
  8. // 创建OSSClient实例。
  9. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. os.Exit(-1)
  13. }
  14. bucketName := "<yourBucketName>"
  15. // 获取存储空间。
  16. bucket, err := client.Bucket(bucketName)
  17. if err != nil {
  18. fmt.Println("Error:", err)
  19. os.Exit(-1)
  20. }
  21. // 分页列举包含指定前缀的文件。每页列举80个。
  22. prefix := oss.Prefix("my-object-")
  23. marker := oss.Marker("")
  24. for {
  25. lsRes, err := bucket.ListObjects(oss.MaxKeys(80), marker, prefix)
  26. if err != nil {
  27. fmt.Println("Error:", err)
  28. os.Exit(-1)
  29. }
  30. prefix = oss.Prefix(lsRes.Prefix)
  31. marker = oss.Marker(lsRes.NextMarker)
  32. fmt.Println("Objects:", lsRes.Objects)
  33. if !lsRes.IsTruncated {
  34. break
  35. }
  36. }
  37. }