本文介绍如何列举文件。
OSS文件按照字母顺序排列。您可以通过Bucket.ListObjects
列出存储空间下的文件。主要的参数如下:
参数 | 说明 |
---|---|
delimiter | 对文件名称进行分组的一个字符。所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素(commonPrefixes)。 |
prefix | 限定返回的文件必须以prefix作为前缀。 |
maxKeys | 限定此次列举文件的最大个数。默认值为100,最大值为1000。 |
marker | 列举指定marker之后的文件。 |
ListObjects的完整代码请参见Github。
简单列举文件
您可以使用默认参数获取存储空间的文件列表,默认返回100条记录。代码如下:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 列举所有文件。
marker := ""
for {
lsRes, err := bucket.ListObjects(oss.Marker(marker))
if err != nil {
HandleError(err)
}
// 打印列举文件,默认情况下一次返回100条记录。
for _, object := range lsRes.Objects {
fmt.Println("Bucket: ", object.Key)
}
if lsRes.IsTruncated {
marker = lsRes.NextMarker
} else {
break
}
}
}
列举指定个数的文件
以下代码用于列举指定个数的文件:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 设置列举文件的最大个数,并列举文件。
lsRes, err := bucket.ListObjects(oss.MaxKeys(200))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打印结果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
列举指定前缀的文件
以下代码用于列举包含指定前缀(prefix)的文件:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列举包含指定前缀的文件。默认列举100个文件。
lsRes, err := bucket.ListObjects(oss.Prefix("my-object-"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打印结果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
列举指定marker之后的文件
参数marker代表文件名称。以下代码用于列举指定marker之后的文件:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列举指定marker之后的文件。默认列举100个文件。
lsRes, err := bucket.ListObjects(oss.Marker("my-object-xx"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打印结果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
分页列举所有文件
以下代码用于分页列举指定存储空间下的所有文件。每页列举的文件个数通过maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分页列举所有文件。每页列举200个。
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(200), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}
分页列举指定marker之后的文件
以下代码用于分页列举指定maker之后的文件。每页列举的文件个数通过maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分页列举指定maker之后的文件。每页列举200个。
marker = oss.Marker("my-object-xx")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(50), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}
分页列举指定前缀的文件
以下代码用于分页列举包含指定前缀的文件。每页列举的文件个数通过maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 获取存储空间。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分页列举包含指定前缀的文件。每页列举80个。
prefix := oss.Prefix("my-object-")
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(80), marker, prefix)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
prefix = oss.Prefix(lsRes.Prefix)
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}