SDK 提供ListObjects
方法用于获取目录文件列表,完整代码详见Github。
ListObjects
方法请求的 US3 API 为 ListObjects,具体详见ListObjects API文档。
参数说明
参数名 | 类型 | 说明 |
---|---|---|
Prefix | string | 返回以Prefix作为前缀的目录文件列表, 为""时默认全匹配 |
Marker | string | 返回以字母排序后,大于Marker的目录文件列表 |
MaxKeys | int | 指定返回目录文件列表的最大数量,默认值为100,不超过1000 |
Delimiter | string | 目录分隔符,当前只支持"/"和"",当Delimiter设置为"/"时,非递归列举,Prefix需以"/"结尾;当Delimiter设置为""时,递归列举所有文件 |
非递归获取指定前缀的所有文件
示例:
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
public class ObjectListWithDirFormatSample {
private static final String TAG = "ObjectListWithDirFormatSample";
private static ObjectConfig config = new ObjectConfig("cn-sh2", "ufileos.com");
public static void main(String[] args) {
String bucketName = "";
execute_list_all(bucketName);
}
//拉取一页列表
public static void execute(String bucketName) {
try {
ObjectListWithDirFormatBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
.objectListWithDirFormat(bucketName)
/**
* 过滤前缀
*/
// .withPrefix("")
/**
* 分页标记
*/
// .withMarker("") //如果要拉下一页,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
/**
* 分页数据上限,Default = 20
*/
// .dataLimit(10)
/**
* 目录分隔符,Default = '/',当前只支持是'/'
*/
.withDelimiter("/")
.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 = "";
List<CommonPrefix> directories = new ArrayList<>();
String prefix = "";
do {
ObjectListWithDirFormatBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
.objectListWithDirFormat(bucketName)
.withMarker(nextMarker)
.dataLimit(100)
.withPrefix(prefix)
/**
* 目录分隔符,Default = '/',当前只支持是'/'
*/
.withDelimiter("/")
.execute();
//遍历结果
if (response == null || response.getObjectContents() == null)
break;
for (ObjectContentBean content : response.getObjectContents()) {
if (content == null)
continue;
JLog.D(TAG, String.format("keyname: %s", content.toString()));
}
if (response.getCommonPrefixes() != null) {
for (CommonPrefix commonPrefix : response.getCommonPrefixes()) {
JLog.D(TAG, String.format("directory: %s", commonPrefix.getPrefix()));
}
}
//获取下一页
nextMarker = response.getNextMarker();
if (response.getCommonPrefixes() != null)
directories.addAll(response.getCommonPrefixes());
if (directories.isEmpty())
prefix = null;
if ((nextMarker == null || nextMarker.isEmpty()) && !directories.isEmpty()) {
nextMarker = "";
prefix = directories.remove(0).getPrefix();
}
} while ((nextMarker != null && nextMarker.length() > 0) || (prefix != null && prefix.length() > 0));
} catch (UfileClientException e) {
e.printStackTrace();
} catch (UfileServerException e) {
e.printStackTrace();
}
}
public static void executeAsync(String bucketName) {
UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
.objectListWithDirFormat(bucketName)
/**
* 过滤前缀
*/
// .withPrefix("")
/**
* 分页标记
*/
// .withMarker("")
/**
* 分页数据上限,Default = 20
*/
// .dataLimit(10)
/**
* 目录分隔符,Default = '/',当前只支持是'/'
*/
.withDelimiter("/")
.executeAsync(new UfileCallback<ObjectListWithDirFormatBean>() {
@Override
public void onResponse(ObjectListWithDirFormatBean 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公私钥错误 |
404 | -148654 | file not exist | 文件不存在 |
400 | -15005 | invalid delimiter:xxx | delimiter 取值为 "" 或 "/" |
400 | -15005 | invalid maxkeys:xxx | maxkeys 取值范围 [0, 1000] |