このトピックでは、メモリまたはローカルディスクからオブジェクトをアップロードする方法について説明します。 MD5検証を実行して、簡単なアップロードでデータの整合性を確保することもできます。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。
説明バケットのリージョンは、初期化用に指定されたエンドポイントによって決まります。
オブジェクトをアップロードするには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
メモリまたはローカルディスクからオブジェクトをアップロードする
次のサンプルコードは、OSSDataを直接アップロードする方法、またはNSURLを使用してオブジェクトをアップロードする方法の例を示しています。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// Specify the name of the bucket. Example: examplebucket.
put.bucketName = @"examplebucket";
// Specify the full path of the object. Example: exampledir/exampleobject.txt. Do not include the bucket name in the full path.
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // Directly upload NSData.
// (Optional) Configure an upload progress indicator.
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// Specify the number of bytes that are being uploaded, the number of bytes that are uploaded, and the total number of bytes that you want to upload.
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// Configure optional fields.
// put.contentType = @"application/octet-stream";
// Specify Content-MD5.
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// Specify the method that is used to encode the object.
// put.contentEncoding = @"identity";
// Specify the method that is used to display the object content.
// put.contentDisposition = @"attachment";
// Configure object metadata or HTTP headers.
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// Specify the object metadata.
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// Set the access control list (ACL) of the object to private.
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// Set the storage class of the object to Standard.
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// Specify that this upload overwrites an existing object that has the same name.
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// Specify one or more tags for the object.
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// Specify the server-side encryption algorithm that is used to encrypt the destination object when Object Storage Service (OSS) creates the object.
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// Specify the customer master key (CMK) that is managed by Key Management Service (KMS). This parameter takes effect only if you set x-oss-server-side-encryption to KMS.
// [meta setObject:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
// put.objectMeta = meta;
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// waitUntilFinished blocks execution of the current thread but does not block the task progress.
// [putTask waitUntilFinished];
// [put cancel];
オブジェクトをディレクトリにアップロードする
OSSは、階層構造の代わりにフラット構造を使用してオブジェクトを格納します。 ただし、OSSではフォルダー階層をエミュレートできます。 OSSコンソールでディレクトリを作成する場合は、名前がスラッシュ (/) で終わるオブジェクトを作成できます。 次に、オブジェクトをディレクトリにアップロードできます。 OSSコンソールは、名前がスラッシュ (/) で終わるオブジェクトをディレクトリとして表示します。
たとえば、objectKeyをfolder/subfolder/file
に設定した場合、"file" オブジェクトはfolder/subfolder/
ディレクトリにアップロードされます。
デフォルトのパスはルートディレクトリで、その名前はスラッシュ (/) で始まらない。
アップロード中のcontentTypeの設定とMD5検証の有効化
OSSサーバーが受信したデータがクライアントから送信されたデータと同じになるようにするには、リクエストにcontentMd5ヘッダーを追加します。 OSSサーバーは、このヘッダーの値を使用してMD5検証を実行します。 オブジェクトをアップロードするときに、contentTypeを明示的に指定できます。 contentTypeを明示的に指定しない場合、SDKはファイル名またはオブジェクト名に基づいてコンテンツタイプを自動的に決定します。
MD5検証はOSSのパフォーマンスに悪影響を及ぼすことに注意してください。
SDKは、オブジェクトコンテンツのBase64-encoded MD5ハッシュを取得するメソッドを提供します。 次のサンプルコードは、オブジェクトコンテンツのBase64-encoded MD5ハッシュを取得する方法の例を示しています。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// Specify the name of the bucket. Example: examplebucket.
put.bucketName = @"examplebucket";
// Specify the full path of the object. Example: exampledir/exampleobject.txt. Do not include the bucket name in the full path.
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// Directly upload NSData.
// put.uploadingData = <NSData *>;
// (Optional) Configure contentType.
put.contentType = @"application/octet-stream";
// (Optional) Configure MD5 verification.
// Specify the MD5 hash of the file path.
put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"];
// Specify the MD5 hash of the binary data.
// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>];
// (Optional) Configure an upload progress indicator.
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// Specify the number of bytes that are being uploaded, the number of bytes that are uploaded, and the total number of bytes that you want to upload.
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// waitUntilFinished blocks execution of the current thread but does not block the task progress.
// [putTask waitUntilFinished];
// [put cancel];