开发者社区> 问答> 正文

通过ListObjectsRequest列出文件

已解决

展开
收起
2018-03-12 03:34:58 2265 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    通过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

    使用默认参数获取存储空间的文件列表,默认返回100条Object

        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)
    

    指定最大返回数量,最多不能超过1000条

        lsRes, err := bucket.ListObjects(oss.MaxKeys(200))
        if err != nil {
            // HandleError(err)
        }
        fmt.Println("Objects:", lsRes.Objects)
    

    返回指定前缀的Object,默认最多返回100条

        lsRes, err := bucket.ListObjects(oss.Prefix("my-object-"))
        if err != nil {
            // HandleError(err)
        }
        fmt.Println("Objects:", lsRes.Objects)
    

    指定从某个Object(my-object-xx)后返回,默认最多100条

        lsRes, err := bucket.ListObjects(oss.Marker("my-object-xx"))
        if err != nil {
            // HandleError(err)
        }
        fmt.Println("Objects:", lsRes.Objects)
    

    分页获取所有Object,每次返回200条

        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
            }
        }
    

    分页所有获取从特定Object后的所有的Object,每次返回50条

        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
            }
        }
    

    分页所有获取指定前缀为的Object,每次返回80个。

        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/。

    2018-03-18 18:09:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载