このトピックでは、メモリまたはローカルファイルからファイルをアップロードする方法について説明します。 アップロード中に MD5 検証を使用して、データ整合性を確保することもできます。
注意事項
このトピックのサンプルコードを使用する前に、カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する必要があります。 詳細については、「初期化 (iOS SDK)」をご参照ください。
バケットのリージョンは、初期化時に指定されたエンドポイントによって決まります。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。 Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 説明 |
PutObject |
| オブジェクトをアップロードします。 |
| オブジェクトのアップロード時に、 | |
| オブジェクトのアップロード時に、オブジェクトのメタデータに | |
|
メモリまたはローカルファイルからのファイルのアップロード
ファイルをアップロードする際、OSSData を直接アップロードするか、NSURL を使用してファイルをアップロードできます。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// バケット名を指定します。 例:examplebucket。
put.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。 例:exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // NSData を直接アップロードします。
// (オプション) アップロードの進捗状況を設定します。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 現在のアップロード長、アップロード済みの合計長、アップロード予定の合計長。
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// オプションのフィールドを設定します。
// put.contentType = @"application/octet-stream";
// Content-MD5 を設定します。
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// オブジェクトのコーデックを設定します。
// put.contentEncoding = @"identity";
// オブジェクトの表示形式を設定します。
// put.contentDisposition = @"attachment";
// ファイルのアップロード時に、オブジェクトのメタデータまたは HTTP ヘッダーを設定できます。
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// ファイルのメタデータを設定します。
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// オブジェクトのアクセス権限を非公開に設定します。
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// オブジェクトのストレージクラスを標準ストレージに設定します。
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// 同じ名前の宛先オブジェクトを上書きします。
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// オブジェクトタグを指定します。 複数のタグを指定できます。
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// OSS が宛先オブジェクトの作成に使用するサーバ側暗号化アルゴリズムを指定します。
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// KMS で管理されるカスタマーマスターキー (CMK)。 このパラメーターは、x-oss-server-side-encryption が 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 は現在のスレッドをブロックしますが、アップロードプロセスはブロックしません。
// [putTask waitUntilFinished];
// [put cancel];ディレクトリへのファイルのアップロード
OSS にはフォルダの概念がありません。 すべての要素はファイルとして保存されます。 OSS はフォルダをシミュレートする方法を提供します。 フォルダをシミュレートするには、名前がスラッシュ (/) で終わるファイルを作成します。 これにより、そのディレクトリにファイルをアップロードできます。 コンソールでは、スラッシュ (/) で終わるファイルがフォルダとして表示されます。
たとえば、ファイルをアップロードするときに、objectKey を folder/subfolder/file に設定すると、ファイルは folder/subfolder/ ディレクトリにアップロードされます。
デフォルトのパスはルートディレクトリです。 パスをスラッシュ (/) で始める必要はありません。
アップロード時の contentType の設定と MD5 検証の使用
クライアントから送信されたデータと OSS サーバーで受信したデータが同じであることを保証するために、ファイルのアップロード時に contentMd5 値を追加できます。 OSS サーバーはこの MD5 値を検証に使用します。 ファイルのアップロード時に contentType を明示的に指定することもできます。 contentType を指定しない場合、SDK はアップロードのファイル名または objectKey に基づいてコンテンツタイプを自動的に決定します。
MD5 検証はパフォーマンスを低下させる可能性があります。
SDK は、Base64 と contentMd5 値を計算するための便利なメソッドを提供します。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// バケット名を指定します。 例:examplebucket。
put.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。 例:exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// NSData を直接アップロードします。
// put.uploadingData = <NSData *>;
// (オプション) contentType を設定します。
put.contentType = @"application/octet-stream";
// (オプション) contentMd5 検証を設定します。
// ファイルパスの contentMd5 検証を設定します。
put.contentMd5 = [OSSUtil base64Md5ForFilePath:@"<filePath>"];
// バイナリデータの contentMd5 検証を設定します。
// put.contentMd5 = [OSSUtil base64Md5ForData:<NSData *>];
// (オプション) アップロードの進捗状況を設定します。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 現在のアップロード長、アップロード済みの合計長、アップロード予定の合計長。
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 は現在のスレッドをブロックしますが、アップロードプロセスはブロックしません。
// [putTask waitUntilFinished];
// [put cancel];関連ドキュメント
シンプルアップロードの完全なサンプルコードについては、GitHub の例をご参照ください。
シンプルアップロードの API 操作の詳細については、「PutObject」をご参照ください。
OSSClient インスタンスの初期化方法の詳細については、「OSSClient インスタンスの初期化」をご参照ください。