OSS在上傳檔案完成時支援提供回調(Callback)給應用伺服器。您只需要在發送給OSS的請求中攜帶相應的Callback參數,即可實現回調。本文介紹如何使用上傳回調。
說明
由於加入了回調請求和響應的過程,相比簡單上傳,使用回調通知機制一般會導致用戶端花費更多的等待時間。
由於上傳和回調是非同步進行,回調前檔案就已完成上傳操作,所以即使回調失敗,檔案也會上傳,請注意。
注意事項
使用本文樣本前您需要先通過自訂網域名、STS等方式建立OSSClient,具體請參見如何初始化Android端OSSClient執行個體。
範例程式碼
以下代碼用於上傳回調。
// 構造上傳請求。
// 依次填寫Bucket名稱(例如examplebucket)、Object完整路徑(例如exampledir/exampleobject.txt)和本地檔案完整路徑(例如/storage/emulated/0/oss/examplefile.txt)。
// Object完整路徑中不能包含Bucket名稱。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");
put.setCallbackParam(new HashMap<String, String>() {
{
put("callbackUrl", "http://oss-demo.aliyuncs.com:23450");
put("callbackHost", "yourCallbackHost");
put("callbackBodyType", "application/json");
put("callbackBody", "{\"mimeType\":${mimeType},\"size\":${size}}");
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
// 只有設定了servercallback,該值才有資料。
String serverCallbackReturnJson = result.getServerCallbackReturnBody();
Log.d("servercallback", serverCallbackReturnJson);
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 異常處理。
}
});
如果需要支援自訂參數,請參考如下樣本設定:
put.setCallbackParam(new HashMap<String, String>() {
{
put("callbackUrl", "http://oss-demo.aliyuncs.com:23450");
put("callbackHost", "yourCallbackHost");
put("callbackBodyType", "application/json");
put("callbackBody", "{\"object\":${object},\"size\":${size},\"my_var1\":${x:var1},\"my_var2\":${x:var2}}");
}
});
put.setCallbackVars(new HashMap<String, String>() {
{
put("x:var1", "value1");
put("x:var2", "value2");
}
});
相關文檔
關於上傳回調的完整範例程式碼,請參見GitHub樣本。
關於上傳回調的API介面說明,請參見Callback。
關於初始化OSSClient,請參見如何初始化Android端OSSClient執行個體。