Append Object以追加写的方式上传文件。

通过Append Object操作创建的Object类型为Appendable Object,而通过Put Object上传的Object是Normal Object。

以下代码用于追加上传:

AppendObjectRequest append = new AppendObjectRequest("<bucketName>", "<objectName>", "<uploadFilePath>");

ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/octet-stream");
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) {
        // 异常处理。
    }
});

当您使用Append方式上传,注意对追加位置(Position)这个参数进行正确的设置:

  • 当您创建一个Appendable Object时,追加位置设为0。
  • 当对Appendable Object进行内容追加时,追加位置设为Object当前长度。

    有两种方式获取该Object长度:

    • 通过上传追加后的返回内容获取。
    • 通过head object获取文件长度。