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