追加上傳是指通過AppendObject方法在已上傳的追加類型檔案(Appendable Object)末尾直接追加內容。
說明
通過AppendObject操作上傳的Object類型為Appendable Object,而通過PutObject操作上傳的Object類型為Normal Object。
注意事項
使用本文樣本前您需要先通過自訂網域名、STS等方式建立OSSClient,具體請參見如何初始化Android端OSSClient執行個體。
當使用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) {
// 異常處理。
}
});
相關文檔
關於追加上傳的完整範例程式碼,請參見GitHub樣本。
關於追加上傳的API介面說明,請參見AppendObject。
關於初始化OSSClient,請參見如何初始化Android端OSSClient執行個體。