SDK 提供IOPut
与IOMutipartAsyncUpload
方法实现了流式上传功能,即使用io.Reader
作为对象的数据源。IOPut
适用于小文件,IOMutipartAsyncUpload
适用于大文件。
IOPut 代码示例
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
public static void putStream(InputStream stream, long contentLength, String mimeType, String nameAs, String toBucket) {
try {
/**
* 上传回调策略
* 必须填写回调接口url(目前仅支持http,不支持https),可选填回调参数,回调参数请自行决定是否需要urlencode
* 若配置上传回调,则上传接口的回调将会透传回调接口的response,包括httpCode
*/
PutPolicy putPolicy = new PutPolicyForCallback.Builder("http://xxx.xxx.xxx.xxx[:port][/path]")
.addCallbackBody(new PolicyParam("key", "value"))
.build();
PutObjectResultBean response = UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
.putObject(stream, contentLength, mimeType)
.nameAs(nameAs)
.toBucket(toBucket)
/**
* 配置文件存储类型,分别是标准、低频、冷存,对应有效值:STANDARD | IA | ARCHIVE
*/
.withStorageType(StorageType.STANDARD)
/**
* 图片处理服务
* https://docs.ucloud.cn/ufile/service/pic
*/
// .withIopCmd("iopcmd=rotate°ree=90")
/**
* 为云端对象配置自定义数据,每次调用将会替换之前数据。
* 所有的自定义数据总大小不能超过 8KB。
*/
// .withMetaDatas()
/**
* 为云端对象添加自定义数据,可直接调用,无须先调用withMetaDatas
* key不能为空或者""
*
*/
// .addMetaData(new Parameter<>("key","value"))
/**
* 配置上传回调策略
*/
// .withPutPolicy(putPolicy)
/**
* 是否上传校验MD5
*/
// .withVerifyMd5(false)
/**
* 指定progress callback的间隔
*/
// .withProgressConfig(ProgressConfig.callbackWithPercent(10))
/**
* 配置读写流Buffer的大小, Default = 256 KB, MIN = 4 KB, MAX = 4 MB
*/
// .setBufferSize(4 << 20)
/**
* 配置进度监听
*/
.setOnProgressListener(new OnProgressListener() {
@Override
public void onProgress(long bytesWritten, long contentLength) {
JLog.D(TAG, String.format("[progress] = %d%% - [%d/%d]", (int) (bytesWritten * 1.f / contentLength * 100), bytesWritten, contentLength));
}
})
.execute();
JLog.D(TAG, String.format("[res] = %s", (response == null ? "null" : response.toString())));
} catch (UfileClientException e) {
e.printStackTrace();
} catch (UfileServerException e) {
e.printStackTrace();
}
}
IOMutipartAsyncUpload代码示例
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
public static void putStreamAsync(InputStream stream, long contentLength, String mimeType, String nameAs, String toBucket) throws UfileClientException {
/**
* 上传回调策略
* 必须填写回调接口url(目前仅支持http,不支持https),可选填回调参数,回调参数请自行决定是否需要urlencode
* 若配置上传回调,则上传接口的回调将会透传回调接口的response,包括httpCode
*/
PutPolicy putPolicy = new PutPolicyForCallback.Builder("http://xxx.xxx.xxx.xxx[:port][/path]")
.addCallbackBody(new PolicyParam("key", "value"))
.build();
UfileClient.object(Constants.OBJECT_AUTHORIZER, config)
.putObject(stream, contentLength, mimeType)
.nameAs(nameAs)
.toBucket(toBucket)
/**
* 配置文件存储类型,分别是标准、低频、冷存,对应有效值:STANDARD | IA | ARCHIVE
*/
.withStorageType(StorageType.STANDARD)
/**
* 图片处理服务
* https://docs.ucloud.cn/ufile/service/pic
*/
// .withIopCmd("iopcmd=rotate°ree=90")
/**
* 为云端对象配置自定义数据,每次调用将会替换之前数据。
* 所有的自定义数据总大小不能超过 8KB。
*/
// .withMetaDatas()
/**
* 为云端对象添加自定义数据,可直接调用,无须先调用withMetaDatas
* key不能为空或者""
*
*/
// .addMetaData(new Parameter<>("key","value"))
/**
* 配置上传回调策略
*/
// .withPutPolicy(putPolicy)
/**
* 是否上传校验MD5
*/
// .withVerifyMd5(false)
/**
* 指定progress callback的间隔
*/
// .withProgressConfig(ProgressConfig.callbackWithPercent(10))
/**
* 配置读写流Buffer的大小, Default = 256 KB, MIN = 4 KB, MAX = 4 MB
*/
// .setBufferSize(4 << 20)
.executeAsync(new UfileCallback<PutObjectResultBean>() {
@Override
public void onProgress(long bytesWritten, long contentLength) {
JLog.D(TAG, String.format("[progress] = %d%% - [%d/%d]", (int) (bytesWritten * 1.f / contentLength * 100), bytesWritten, contentLength));
}
@Override
public void onResponse(PutObjectResultBean 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())));
}
});
}