全部產品
Search
文件中心

Object Storage Service:Android追加上傳

更新時間:Apr 02, 2025

追加上傳是指通過AppendObject方法在已上傳的追加類型檔案(Appendable Object)末尾直接追加內容。

說明

通過AppendObject操作上傳的Object類型為Appendable Object,而通過PutObject操作上傳的Object類型為Normal Object。

注意事項

當使用Append方式上傳Object時,請注意對追加位置(Position)參數進行正確的設定。

  • 當建立一個Appendable Object時,請設定追加位置為0。

  • 當對Appendable Object進行內容追加時,請設定追加位置為Object當前長度。

    您可以通過追加上傳後的返回內容或者通過HeadObject操作擷取Object長度。

許可權說明

阿里雲帳號預設擁有全部許可權。阿里雲帳號下的RAM使用者或RAM角色預設沒有任何許可權,需要阿里雲帳號或帳號管理員通過RAM PolicyBucket Policy授予操作許可權。

API

Action

說明

AppendObject

oss:PutObject

以追加寫的方式上傳檔案(Object)。

oss:PutObjectTagging

以追加寫的方式上傳檔案(Object)時,如果通過x-oss-tagging指定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) {
        // 異常處理。
    }
});

相關文檔