前缀列表查询

SDK 提供PrefixFileList方法用于前缀列表查询。

PrefixFileList方法请求的 US3 API 为 PrefixFileList,具体详见PrefixFileList API文档

参数说明

参数名 类型 说明
Prefix string 返回以Prefix作为前缀的目录文件列表, 为""时默认全匹配
Marker string 返回以字母排序后,大于Marker的目录文件列表
Limit int 指定返回目录文件列表的最大数量,传入 0 时会默认设置为 20,不可大于1000

获取指定前缀的所有文件

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public class ObjectListSample {
    private static final String TAG = "ObjectListSample";
    private static ObjectConfig config = new ObjectConfig("cn-bj", "ufileos.com");

    public static void main(String[] args) {
        String bucketName = "fkfr";

        execute_list_all(bucketName);
    }

    //拉取一页列表
    public static void execute(String bucketName) {
        try {
            ObjectListBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
                    .objectList(bucketName)
                    /**
                     * 过滤前缀
                     */
//                .withPrefix("")
                    /**
                     * 分页标记
                     * 如果要拉下一页,withMarker 里要把 response.getNextMarker()  填进去,就可以拉下一页;
                     * 如果 response.getNextMarker() 为"" 表示列表已经拉完了
                     * 参考:https://github.com/ufilesdk-dev/elasticsearch-repository-ufile/blob/dev/src/main/java/org/elasticsearch/repository/ufile/UfileBlobStore.java,
                     * 函数 listBlobsByPrefix
                     */
//                .withMarker("")
                    /**
                     * 分页数据上限,Default = 20
                     */
//                .dataLimit(10)
                    .execute();
            JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
        } catch (UfileClientException e) {
            e.printStackTrace();
        } catch (UfileServerException e) {
            e.printStackTrace();
        }
    }

    //拉取全部文件列表
    /*关于分页拉列表:
    第一次拉: nextMarker 填 "",  返回值里,会有 nextMarker 的值  "xxxx", 返回 0-99 的结果
    第二次拉: nextMarker 填 "xxxx",  就可以拉  100-199  的结果,通过会返回新的 nextMarker "yyyy"
    第三次拉: nextMarker 填 "yyyy",  就可以拉  200-299  的结果,通过会返回新的 nextMarker "zzzz"
            。。。。
    直到, 如果拉到列表尾部了, nextMarker 会返回长度为0的串,  表示到达尾部; 就拉完了, 不需要继续拉列表
    https://docs.ucloud.cn/api/ufile-api/prefix_file_list
    */
    public static void execute_list_all(String bucketName) {
        try {
            String nextMarker = "";
            do {
                ObjectListBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
                        .objectList(bucketName)
                        .withMarker(nextMarker)
                        .dataLimit(100)
                        .execute();
                //遍历结果
                for (ObjectInfoBean objInfo : response.getObjectList()) {
                    JLog.D(TAG, String.format("keyname: %s", objInfo.getFileName()));
                }
                //获取下一页
                nextMarker = response.getNextMarker();
                JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
            } while (nextMarker != null && nextMarker.length() != 0);

        } catch (UfileClientException e) {
            e.printStackTrace();
        } catch (UfileServerException e) {
            e.printStackTrace();
        }
    }

    public static void executeAsync(String bucketName) {
        UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
                .objectList(bucketName)
                /**
                 * 过滤前缀
                 */
//                .withPrefix("")
                /**
                 * 分页标记
                 */
//                .withMarker("")
                /**
                 * 分页数据上限,Default = 20
                 */
//                .dataLimit(10)
                .executeAsync(new UfileCallback<ObjectListBean>() {

                    @Override
                    public void onResponse(ObjectListBean response) {
                        JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
                    }

                    @Override
                    public void onError(Request request, ApiError error, UfileErrorBean response) {
                        JLog.D(TAG, String.format("[error] = %s\n[info] = %s",
                                (error == null ? "null" : error.toString()),
                                (response == null ? "null" : response.toString())));
                    }
                });
    }
}

错误码

HTTP 状态码 RetCode ErrMsg 描述
400 -148653 bucket not exists 存储空间不存在
400 -15036 check md5 failed MD5校验失败
401 -148643 no authorization found 上传凭证错误
403 -148643 invalid signature API公私钥错误
400 -15005 invalid limit:xxx limit 取值范围 [0, 10000]