追加アップロードは、AppendObject メソッドを使用して、既存の追加可能オブジェクトにコンテンツを追加します。
AppendObject 操作を使用してアップロードされたオブジェクトは追加可能オブジェクトです。 PutObject 操作を使用してアップロードされたオブジェクトは通常のオブジェクトです。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名や Security Token Service (STS) などのメソッドを使用して OSSClient インスタンスを作成する必要があります。 詳細については、「初期化 (Android SDK)」をご参照ください。
データを追加してオブジェクトをアップロードする場合、position パラメーターを正しく設定する必要があります。
追加可能オブジェクトを作成するときは、position パラメーターを 0 に設定します。
追加可能オブジェクトにコンテンツを追加するときは、position パラメーターをオブジェクトの現在の長さに設定します。
オブジェクトの長さは、前回の追加アップロードの応答から、または HeadObject 操作を使用して取得できます。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。 Alibaba Cloud アカウント下の Resource Access Management (RAM) ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | Action | 定義 |
AppendObject |
| この操作を呼び出して、既存のオブジェクトにデータを追加アップロードします。 |
| 追加アップロードでオブジェクトタグを x-oss-tagging を通じて指定する場合、この権限が必要です。 |
コード例
次のコードは、オブジェクトにデータを追加する方法を示しています。
// バケット名、オブジェクトの完全なパス、およびローカルファイルの完全なパスを指定します。 例:examplebucket、exampledir/exampleobject.txt、および /storage/emulated/0/oss/examplefile.txt。
// オブジェクトの完全なパスにバケット名を含めることはできません。
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) {
// 例外を処理します。
}
});Android 10 以降の対象範囲別ストレージでは、ファイルの URI を使用してファイルを OSS にアップロードできます。
// バケット名とオブジェクトの完全なパスを指定します。 例:examplebucket と exampledir/exampleobject.txt。
// オブジェクトの完全なパスにバケット名を含めることはできません。
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 インスタンスの初期化」をご参照ください。