本文介绍如何列举指定存储空间(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。