すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:追加アップロード

最終更新日:Dec 20, 2023

Object Storage Service (OSS) のAppendObject操作を呼び出して、追加可能なオブジェクトにコンテンツを追加できます。 これは追加アップロードと呼ばれます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

  • 追加アップロードを使用するには、oss:PutObject権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。

  • コンテンツを追加するオブジェクトが存在しない場合、AppendObject操作を呼び出すと追加可能なオブジェクトが作成されます。

  • コンテンツを追加するオブジェクトが存在する場合:

    • オブジェクトが追加可能なオブジェクトであり、追加操作が開始される指定された位置が現在のオブジェクトサイズに等しい場合、データはオブジェクトの最後に追加されます。

    • オブジェクトが追加可能オブジェクトであり、追加操作の開始位置が現在のオブジェクトサイズと等しくない場合、PositionNotEqualToLengthエラーが返されます。

    • オブジェクトが追加可能オブジェクトでない場合、ObjectNotAppendableエラーが返されます。

  • CopyObject操作は、追加可能なオブジェクトでは実行できません。

サンプルコード

次のコードは、追加アップロードの実行方法の例を示しています。

OSSAppendObjectRequest * append = [OSSAppendObjectRequest new];
// 必須フィールドを設定します。 bucketNameは、バケットの名前を示します。 objectKeyは、追加アップロードを使用してOSSにアップロードするオブジェクトのフルパスを示すobjectNameと同等です。 パスには、オブジェクトの拡張子を含める必要があります。 たとえば、objectKeyをabc/efg/123.jpg. に設定できます。 
append.bucketName = @ "<bucketName>";
append.objectKey = @ "<objectKey>";
// 最初の追加操作の開始位置を指定します。 
append.appendPosition = 0;
NSString * docDir = [self getDocumentDirectory];
append.uploadingFileURL = [NSURL fileURLWithPath:@ "<filepath>"];
// オプションのフィールドを設定します。 
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);
    }
    nilを返します。}]; 

参考資料

追加アップロードを実行するために呼び出すことができるAPI操作の詳細については、「AppendObject」をご参照ください。