详细解答可以参考官方帮助文档
通过Bucket.ListObjects
来列出当前Bucket下的文件。主要的参数如下:
参数 | 说明 |
---|---|
Delimiter | 用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素CommonPrefixes |
Prefix | 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix |
MaxKeys | 限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000 |
Marker | 设定结果从marker之后按字母排序的第一个开始返回 |
提示:
- ListObjects的示例代码在
sample/list_objects.go
import "fmt"
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
lsRes, err := bucket.ListObjects()
if err != nil {
// HandleError(err)
}
fmt.Println("Objects:", lsRes.Objects)
lsRes, err := bucket.ListObjects(oss.MaxKeys(200))
if err != nil {
// HandleError(err)
}
fmt.Println("Objects:", lsRes.Objects)
lsRes, err := bucket.ListObjects(oss.Prefix("my-object-"))
if err != nil {
// HandleError(err)
}
fmt.Println("Objects:", lsRes.Objects)
lsRes, err := bucket.ListObjects(oss.Marker("my-object-xx"))
if err != nil {
// HandleError(err)
}
fmt.Println("Objects:", lsRes.Objects)
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(200), marker)
if err != nil {
HandleError(err)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
marker = oss.Marker("my-object-xx")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(50), marker)
if err != nil {
// HandleError(err)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
prefix := oss.Prefix("my-object-")
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(80), marker, prefix)
if err != nil {
// HandleError(err)
}
prefix = oss.Prefix(lsRes.Prefix)
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
OSS是基于对象的存储服务,没有目录的概念。存储在一个Bucket中所有文件都 是通过文件的key唯一标识,并没有层级的结构。这种结构可以让OSS的存储非常 高效,但是用户管理文件时希望能够像传统的文件系统一样把文件分门别类放到 不同的“目录”下面。通过OSS提供的“公共前缀”的功能,也可以很方便地模拟目录 结构。公共前缀的概念请参考 列出Object 。
假设Bucket中已有如下文件:
foo/x
foo/y
foo/bar/a
foo/bar/b
foo/hello/C/1
foo/hello/C/2
通过ListObjects,列出指定目录下的文件和子目录:
lsRes, err := bucket.ListObjects(oss.Prefix("foo/"), oss.Delimiter("/"))
if err != nil {
// HandleError(err)
}
fmt.Println("Objects:", lsRes.Objects,"SubDir:", lsRes.CommonPrefixes)
结果中lsRes.Objects为文件,包括foo/x、foo/y;lsRes.CommonPrefixes即子目录,包括foo/bar/、foo/hello/。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。