追加アップロードでは、Object Storage Service (OSS) の `AppendObject` API 操作を使用して、既存のアペンド可能なオブジェクトにコンテンツを追加します。
`AppendObject` 操作でアップロードされたオブジェクトはアペンド可能なオブジェクトです。`PutObject` 操作でアップロードされたオブジェクトは通常のオブジェクトです。
考慮事項
このトピックの例を使用する前に、カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する必要があります。詳細については、「初期化 (iOS SDK)」をご参照ください。
説明作成するバケットのリージョンは、初期化設定で指定されたエンドポイントによって決まります。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
オブジェクトが存在しない場合、AppendObject 操作を呼び出すと、新しい追加可能なオブジェクトが作成されます。
オブジェクトが既に存在する場合:
オブジェクトがアペンド可能なオブジェクトであり、指定された追加位置がオブジェクトの現在の長さと一致する場合、コンテンツはオブジェクトの末尾に追加されます。
オブジェクトがアペンド可能なオブジェクトであっても、指定された追加位置がオブジェクトの現在の長さと一致しない場合、PositionNotEqualToLength 例外がスローされます。
オブジェクトが、簡易アップロードを使用してアップロードされた通常のオブジェクトなど、アペンド可能なオブジェクトではない場合、ObjectNotAppendable 例外がスローされます。
CopyObject 操作は、追加可能オブジェクトではサポートされていません。
権限
デフォルトでは、Alibaba Cloud アカウント (root ユーザー) はすべての権限を持ちます。Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
AppendObject |
| この操作を呼び出すと、既存のオブジェクトへの追加によってオブジェクトをアップロードできます。 |
| 既存のオブジェクトへの追加によってオブジェクトをアップロードする際に、`x-oss-tagging` を通じてオブジェクトタグを指定する場合は、この権限が必要です。 |
サンプルコード
次のコードは、追加アップロードを実行する方法の例を示しています。
OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];
// 必須フィールドを設定します。`bucketName` はバケット名を指定します。`objectName` と同義の `objectKey` は、データを追加するオブジェクトの完全なパスを指定します。パスには、`abc/efg/123.jpg` のようにファイル拡張子を含める必要があります。
append.bucketName = @"<bucketName>";
append.objectKey = @"<objectKey>";
// 最初の追加アップロードの位置を指定します。
append.appendPosition = 0;
NSString * docDir = [self getDocumentDirectory];
append.uploadingFileURL = [NSURL fileURLWithPath:@"<yourLocalFilePath>"];
// 以下のフィールドはオプションです。
append.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// append.contentType = @"";
// append.contentMd5 = @"";
// append.contentEncoding = @"";
// append.contentDisposition = @"";
OSSTask * appendTask = [client appendObject:append];
[appendTask continueWithBlock:^id(OSSTask *task) {
NSLog(@"objectKey: %@", append.objectKey);
if (!task.error) {
NSLog(@"append object success!");
OSSAppendObjectResult * result = task.result;
NSString * etag = result.eTag;
long nextPosition = result.xOssNextAppendPosition;
} else {
NSLog(@"append object failed, error: %@" , task.error);
}
return nil;
}];関連ドキュメント
`AppendObject` API 操作の詳細については、「AppendObject」をご参照ください。
詳細については、「OSSClient インスタンスの初期化方法」をご参照ください。