アップロードの再開
ファイルアップロードは、受動的な理由(例:ネットワーク断)または能動的な理由(例:ユーザー操作)によって中断されることがあります。中断されたアップロードは、後ほど中断したポイントから再開可能です。
中断したファイルアップロードを再開する例を以下に挙げます。
Swift:
-
// Instantiate a bucket. let bucket = KiiUser.current()!.bucket(withName: "MyBucket") // Get the transfer manager of the bucket. let manager = bucket.transferManager() // Prepare an array for storing KiiUploader instances. let uploadEntries : [KiiUploader] do{ // Get all KiiUploader instances. uploadEntries = try manager.getDownloadEntries() as! [KiiUploader] }catch(let error as NSError){ // Handle the error. return } for uploader in uploadEntries { // If the upload status is "suspended" if uploader.info().status() == .rtStatus_SUSPENDED { // Create a progress block. let progress : KiiRTransferBlock = { (transferObject : KiiRTransfer, error ) in let info = transferObject.info() print("Progress : \(Float(info.completedSizeInBytes()/info.totalSizeInBytes()))") } do{ // Resume uploading. try uploader.transfer(progressBlock: progress) } catch let error as NSError { // Handle the error. return } } }
-
// Instantiate a bucket. let bucket = KiiUser.current()!.bucket(withName: "MyBucket") // Get the transfer manager of the bucket. let manager = bucket.transferManager() // Prepare an array for storing KiiUploader instances. let uploadEntries : [KiiUploader] do{ // Get all KiiUploader instances. uploadEntries = try manager.getDownloadEntries() as! [KiiUploader] }catch(let error as NSError){ // Handle the error. return } for uploader in uploadEntries { // If the upload status is "suspended" if uploader.info().status() == .rtStatus_SUSPENDED { // Create a progress block and a completion block. let progress : KiiRTransferBlock = { (transferObject : KiiRTransfer, error ) in let info = transferObject.info() print("Progress : \(Float(info.completedSizeInBytes()/info.totalSizeInBytes()))") } let completion : KiiRTransferBlock = { (transferObject : KiiRTransfer, error ) in if error != nil { // Handle the error. return } } // Resume uploading. uploader.transfer(progressBlock: progress, andCompletionBlock: completion) } }
Objective-C:
-
// Instantiate a bucket. KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; // Get the transfer manager of the bucket. KiiRTransferManager *manager = [bucket transferManager]; // Get all KiiUploader instances. NSError *error = nil; NSArray *uploadEntries = [manager getUploadEntries:&error]; if (error != nil) { // Handle the error. return; } for (KiiUploader *uploader in uploadEntries) { // If the upload status is "suspended" if ([[uploader info] status] == KiiRTStatus_SUSPENDED) { // Create a progress block. KiiRTransferBlock progress = ^(id <KiiRTransfer> transferObject, NSError *retError) { KiiRTransferInfo *info = [transferObject info]; NSLog(@"Progress : %f", (float) [info completedSizeInBytes] / [info totalSizeInBytes]); }; // Resume uploading. [uploader transferWithProgressBlock:progress andError:&error]; if (error != nil) { // Handle the error. NSLog(@"Transfer error happens"); return; } } }
-
// Instantiate a bucket. KiiBucket *bucket = [[KiiUser currentUser] bucketWithName:@"MyBucket"]; // Get the transfer manager of the bucket. KiiRTransferManager *manager = [bucket transferManager]; // Get all KiiUploader instances. NSError *error = nil; NSArray *uploadEntries = [manager getUploadEntries:&error]; if (error != nil) { // Handle the error. return; } for (KiiUploader *uploader in uploadEntries) { // If the upload status is "suspended" if ([[uploader info] status] == KiiRTStatus_SUSPENDED) { // Create a progress block and a completion block. KiiRTransferBlock progress = ^(id <KiiRTransfer> transferObject, NSError *retError) { KiiRTransferInfo *info = [transferObject info]; NSLog(@"Progress : %f", (float) [info completedSizeInBytes] / [info totalSizeInBytes]); }; KiiRTransferBlock completion = ^(id <KiiRTransfer> transferObject, NSError *retError) { if (retError != nil) { // Handle the error. NSLog(@"Transfer error happens"); return; } }; // Resume uploading. [uploader transferWithProgressBlock:progress andCompletionBlock:completion]; } }
ここでは以下の処理を行っています。
- アップロード再開対象ファイルが紐付いている KiiObject が存在する Bucket のインスタンスを作成。
transferManager()
メソッドを実行して、KiiRTransferManager
インスタンスを作成。getUploadEntries()
メソッドを実行して、KiiUploader
インスタンス一覧を取得。- Progress block と complemtion block をそれぞれ定義。
- 再開する
KiiUploader
インスタンスのtransfer(progressBlock:andCompletionBlock)
メソッドを実行して、アップロードを再開。
KiiDownloader の状態確認
上記のサンプルコードのとおり KiiUploader
の info()
メソッドを使うと、KiiRTransferInfo
オブジェクトを取得できます。このオブジェクトから、各転送に対する転送済みのバイト数、転送予定の全バイト数、状態(転送中/停止中など)を取得できます。