追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。
说明 通过AppendObject操作上传的Object类型为Appendable Object,而通过PutObject操作上传的Object类型为Normal Object。当使用Append方式上传Object时,请注意对追加位置(Position)参数进行正确的设置。
- 当创建一个Appendable Object时,请设置追加位置为0。
- 当对Appendable Object进行内容追加时,请设置追加位置为Object当前长度。
您可以通过追加上传后的返回内容或者通过HeadObject操作获取Object长度。
示例代码
以下代码用于追加上传文件。
// 依次填写Bucket名称(例如examplebucket)、Object完整路径(例如exampledir/exampleobject.txt)和本地文件完整路径(例如/storage/emulated/0/oss/examplefile.txt)。
// Object完整路径中不能包含Bucket名称。
AppendObjectRequest append = new AppendObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
append.setMetadata(metadata);
// 设置追加位置。
append.setPosition(0);
// 设置回调。
append.setProgressCallback(new OSSProgressCallback() {
@Override
public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
// 异步追加上传。
OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback() {
@Override
public void onSuccess(AppendObjectRequest request, AppendObjectResult result) {
Log.d("AppendObject", "AppendSuccess");
Log.d("NextPosition", "" + result.getNextPosition());
}
@Override
public void onFailure(AppendObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 异常处理。
}
});
对于Android10及之后版本的分区存储,您可以使用文件的Uri上传文件到OSS。
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。
// Object完整路径中不能包含Bucket名称。
AppendObjectRequest append = new AppendObjectRequest("examplebucket", "exampledir/exampleobject.txt", fileUri);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("text/plain");
append.setMetadata(metadata);
// 设置追加位置。
append.setPosition(0);
// 设置回调。
append.setProgressCallback(new OSSProgressCallback() {
@Override
public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) {
Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
// 异步追加上传。
OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback() {
@Override
public void onSuccess(AppendObjectRequest request, AppendObjectResult result) {
Log.d("AppendObject", "AppendSuccess");
Log.d("NextPosition", "" + result.getNextPosition());
}
@Override
public void onFailure(AppendObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 异常处理。
}
});
相关文档
- 关于追加上传的完整示例代码,请参见GitHub示例。
- 关于追加上传的API接口说明,请参见AppendObject。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/158389.html