追加上传是指通过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<AppendObjectRequest>() { @Override public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) { Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize); } }); // 异步追加上传。 OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback<AppendObjectRequest, AppendObjectResult>() { @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<AppendObjectRequest>() { @Override public void onProgress(AppendObjectRequest request, long currentSize, long totalSize) { Log.d("AppendObject", "currentSize: " + currentSize + " totalSize: " + totalSize); } }); // 异步追加上传。 OSSAsyncTask task = oss.asyncAppendObject(append, new OSSCompletedCallback<AppendObjectRequest, AppendObjectResult>() { @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) { // 异常处理。 } });