Uploading an Object Body
The following sample code shows how to upload an object body with the transfer-at-once method.
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("MyImage", forKey: "title") object.setObject(NSNumber(value: 783204 as Int), forKey: "fileSize") do{ // Save the KiiObject. try object.saveSynchronous() } catch let error as NSError { // Handle the error. return } // Specify a file to upload. let targetDirectory : NSString = (NSHomeDirectory() as NSString).appendingPathComponent("Documents") as NSString let sourceFilePath = targetDirectory.appendingPathComponent("myImage.jpg") let sourceFileURL = URL(fileURLWithPath: sourceFilePath) // Start uploading. do{ try object.uploadBodySynchronous(with: sourceFileURL, andContentType: "image/jpeg") } 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("MyImage", forKey: "title") object.setObject(NSNumber(value: 783204 as Int), forKey: "fileSize") // Save the KiiObject. object.save { (object : KiiObject?, error : Error?) -> Void in if error != nil { // Handle the error. return } // Specify a file to upload. let targetDirectory : NSString = (NSHomeDirectory() as NSString).appendingPathComponent("Documents") as NSString let sourceFilePath = targetDirectory.appendingPathComponent("myImage.jpg") let path = URL(fileURLWithPath: sourceFilePath) // Create a progress block. let progress : KiiObjectBodyProgressBlock = { (transObj : KiiObject, completedSizeInBytes : Int, totalSizeInBytes : Int, error : Error?) in print("Progress : \(Float(completedSizeInBytes/totalSizeInBytes))") } // Start uploading. object!.uploadBody(with: path, andContentType: "image/jpeg", andCompletion: { (retObject : KiiObject?, error : Error?) -> Void in if error != nil { // Handle the error. return } }, andProgress:progress) }
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:@"MyImage" forKey:@"title"]; [object setObject:[NSNumber numberWithInt:783204] forKey:@"fileSize"]; // Save the KiiObject. NSError *error = nil; [object saveSynchronous:&error]; if (error != nil) { // Handle the error. return; } // Specify a file to upload. NSString *targetDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *sourceFilePath = [targetDirectory stringByAppendingPathComponent:@"myImage.jpg"]; NSURL *path = [NSURL fileURLWithPath:sourceFilePath]; // Start uploading. [object uploadBodySynchronousWithURL:path andContentType:@"image/jpeg" 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:@"MyImage" forKey:@"title"]; [object setObject:[NSNumber numberWithInt:783204] forKey:@"fileSize"]; // Save the KiiObject. [object saveWithBlock:^(KiiObject *object, NSError *error) { if (error != nil) { // Handle the error. return; } // Specify a file to upload. NSString *targetDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *sourceFilePath = [targetDirectory stringByAppendingPathComponent:@"myImage.jpg"]; NSURL *path = [NSURL fileURLWithPath:sourceFilePath]; // Create a progress block. KiiObjectBodyProgressBlock progress = ^(KiiObject *transObj, NSUInteger completedSizeInBytes, NSUInteger totalSizeInBytes, NSError *retError) { NSLog(@"Progress : %f", (float) completedSizeInBytes/ totalSizeInBytes); }; // Start uploading. [object uploadBodyWithURL:path andContentType:@"image/jpeg" andCompletion:^(KiiObject *obj, NSError *error) { if (error != nil) { // Handle the error. return; } } andProgress:progress]; }];
Here is what is happening in the sample code:
- Set key-value pairs (e.g., file name, file size, and the availability of an object body) in a KiiObject as needed.
- Call the
save(_:)
method to create a new KiiObject. - Create a reference to the target file (myImage.jpg).
- Start uploading by calling the
uploadBody(with:andContentType:andCompletion:_:andProgress:)
method.
You need to create a KiiObject with the save(_:)
method prior to uploading its object body with the uploadBody(with:andContentType:andCompletion:)
method.
Set the content type in a form of "type/subtype". The content type sent to Kii Cloud will be used when the object body is downloaded and when the object body is published and viewed on the browser.