このトピックでは、メモリまたはローカルディスクからオブジェクトをアップロードする方法について説明します。 MD5検証を実行して、簡単なアップロードでデータの整合性を確保することもできます。
メモリまたはローカルディスクからオブジェクトをアップロードする
次のサンプルコードでは、NSDataを直接アップロードする方法、または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];
// オブジェクトメタデータを指定します。
// [meta setObject:@ "value" forKey:@ "x-oss-meta-name1"];
// オブジェクトのアクセス制御リスト (ACL) をprivateに設定します。
// [meta setObject:@ "private" forKey:@ "x-oss-object-acl"];
// オブジェクトのストレージクラスをStandardに設定します。
// [meta setObject:@ "標準" forKey:@ "x-oss-storage-class"];
// このアップロードで同じ名前の既存のオブジェクトを上書きするように指定します。
// [meta setObject:@ "true" forKey:@ "x-oss-forbid-overwrite"];
// オブジェクトに1つ以上のタグを指定します。
// [meta setObject:@ "a:1" forKey:@ "x-oss-tagging"];
// object Storage Service (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(@ "オブジェクトのアップロード成功!");
} else {
NSLog(@ "オブジェクトのアップロードに失敗、エラー: % @" 、task.error);
}
nilを返します。}];
// waitUntilFinishedは現在のスレッドの実行をブロックしますが、タスクの進行はブロックしません。
// [putTask waitUntilFinished];
// [プットキャンセル];
オブジェクトをディレクトリにアップロードする
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];
// バケットの名前を指定します。 例: 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";
// (オプション) MD5検証を設定します。
// ファイルパスのMD5ハッシュを指定します。
put.contentMd5 = [OSSUtil base64Md5ForFilePath:@ "<filePath>"];
// バイナリデータのMD5ハッシュを指定します。
// 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(@ "オブジェクトのアップロード成功!");
} else {
NSLog(@ "オブジェクトのアップロードに失敗、エラー: % @" 、task.error);
}
nilを返します。}];
// waitUntilFinishedは現在のスレッドの実行をブロックしますが、タスクの進行はブロックしません。
// [putTask waitUntilFinished];
// [プットキャンセル];