アップロード

中断/再開が可能な 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% の進捗を示すことがあります。

何らかの理由によりアップロードが中断した場合はエラーが発生します。この場合、中断箇所よりアップロードの再開を行うことができます。再開方法については アップロードの再開 を参照してください。