アップロード
中断/再開が可能な Object Body のアップロードをする例を以下に挙げます。
Swift:
-
// Create a KiiObject in a user-scope bucket. let bucket = KiiUser.current()!.bucket(withName: "MyBucket") let object = bucket.createObject() // Set key-value pairs. object.setObject("myVideo", forKey: "title") object.setObject(NSNumber(value: 10485760 as Int), forKey: "fileSize") // Specify a file to upload. let targetDirectory : NSString = (NSHomeDirectory() as NSString).appendingPathComponent("Documents") as NSString let sourceFilePath = targetDirectory.appendingPathComponent("sample.mp4") // Create an uploader. let uploader = object.uploader(sourceFilePath) // Create a progress block. let progress : KiiRTransferBlock = { (transferObject : KiiRTransfer, error ) in let info = transferObject.info() print("Progress : \(Float(info.completedSizeInBytes()/info.totalSizeInBytes()))") } do{ // Start uploading. try uploader.transfer(progressBlock: progress) } catch let error as NSError { // Handle the error. return }
-
// Create a KiiObject in a user-scope bucket. let bucket = KiiUser.current()!.bucket(withName: "MyBucket") let object = bucket.createObject() // Set key-value pairs. object.setObject("myVideo", forKey: "title") object.setObject(NSNumber(value: 10485760 as Int), forKey: "fileSize") // Specify a file to upload. let targetDirectory : NSString = (NSHomeDirectory() as NSString).appendingPathComponent("Documents") as NSString let sourceFilePath = targetDirectory.appendingPathComponent("sample.mp4") // Create an uploader. let uploader = object.uploader(sourceFilePath) // Create a progress block. let progress : KiiRTransferBlock = { (transferObject : KiiRTransfer, error ) in let info = transferObject.info() print("Progress : \(Float(info.completedSizeInBytes()/info.totalSizeInBytes()))") } // Start uploading. uploader.transfer(progressBlock: progress, andCompletionBlock: { (transferObject : KiiRTransfer, error ) in if error != nil { // Handle the error. return } })
Objective-C:
-
// Create a KiiObject in a user-scope bucket. KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; KiiObject *object = [bucket createObject]; // Set key-value pairs. [object setObject:@"MyVideo" forKey:@"title"]; [object setObject:[NSNumber numberWithInt:10485760] forKey:@"fileSize"]; // Specify a file to upload. NSString *targetDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *sourceFilePath = [targetDirectory stringByAppendingPathComponent:@"sample.mp4"]; // Create an uploader. KiiUploader *uploader = [object uploader:sourceFilePath]; // Create a progress block. KiiRTransferBlock progress = ^(id <KiiRTransfer> transferObject, NSError *retError) { KiiRTransferInfo *info = [transferObject info]; NSLog(@"Progress : %f", (float) [info completedSizeInBytes] / [info totalSizeInBytes]); }; // Start uploading. NSError *error = nil; [uploader transferWithProgressBlock:progress andError:&error]; if (error != nil) { // Handle the error. return; }
-
// Create a KiiObject in a user-scope bucket. KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; KiiObject *object = [bucket createObject]; // Set key-value pairs. [object setObject:@"MyVideo" forKey:@"title"]; [object setObject:[NSNumber numberWithInt:10485760] forKey:@"fileSize"]; // Specify a file to upload. NSString *targetDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *sourceFilePath = [targetDirectory stringByAppendingPathComponent:@"sample.mp4"]; // Create an uploader. KiiUploader *uploader = [object uploader:sourceFilePath]; // Create a progress block. KiiRTransferBlock progress = ^(id <KiiRTransfer> transferObject, NSError *retError) { KiiRTransferInfo *info = [transferObject info]; NSLog(@"Progress : %f", (float) [info completedSizeInBytes] / [info totalSizeInBytes]); }; // Start uploading. [uploader transferWithProgressBlock:progress andCompletionBlock:^(id<KiiRTransfer> transferObject, NSError *error) { if (error != nil) { // Handle the error. return; } }];
ここでは以下の処理を実施しています。
- (必要に応じて)KiiObject にキーと値のペアをセット。ファイル名、ファイルサイズ、Object Body の有無などを登録しておくことも可能。
- アップロード対象ファイル(sample.mp4)のリファレンスを作成。
- アップロード対象ファイルのリファレンスを指定して
uploader(_:)
メソッドを実行し、KiiUploader
インスタンスを作成。 - Progress block を定義。
transfer(progressBlock:andCompletionBlock:_:)
メソッドを実行して、ファイルのアップロードを開始。
Object Body をすでに持つ KiiObject に対して新たにファイルをアップロードした場合、このファイルにより Object Body が上書きされます。
中断/再開可能なアップロードの場合に限り、アップロード対象のオブジェクトの save(_:)
を実行せずにtransfer(progressBlock:andCompletionBlock:_:)
メソッドを呼び出すと自動的に save(_:)
が実行されます。
ブロッキング API の transfer(progressBlock:_:)
メソッドをメインスレッドから呼び出した場合、Progress block は呼び出されません。
Progress block は、転送の進捗状況に応じて呼び出されます。転送サイズが小さい場合は、1 回目の呼び出しで 100% の進捗を示すことがあります。
何らかの理由によりアップロードが中断した場合はエラーが発生します。この場合、中断箇所よりアップロードの再開を行うことができます。再開方法については アップロードの再開 を参照してください。