Objective-C
Objective-C
Upload Media for Google Photos
See more Google Photos Examples
Demonstrates how to upload a media file (such as a JPG image) that will be placed in a Google Photos album. Uploading is a two-step process:
- Upload the raw bytes to a Google Server. This doesn't result in any media items being created in the user’s Google Photos account. Instead, it returns an upload token which identifies the uploaded bytes.
- Use the upload token to create the media item in the user’s Google Photos account. You can choose whether the media should be also added to a specific album.
This example shows step 1.
Chilkat Objective-C Downloads
#import <CkoJsonObject.h>
#import <CkoHttp.h>
#import <CkoBinData.h>
#import <NSString.h>
#import <CkoHttpResponse.h>
BOOL success = NO;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Get the previously obtained access token.
// See Get Google Photos Access Token.
CkoJsonObject *jsonToken = [[CkoJsonObject alloc] init];
success = [jsonToken LoadFile: @"qa_data/tokens/googlePhotos.json"];
if (success == NO) {
NSLog(@"%@",jsonToken.LastErrorText);
return;
}
CkoHttp *http = [[CkoHttp alloc] init];
http.AuthToken = [jsonToken StringOf: @"access_token"];
// This is the HTTPS POST we'll be sending:
// POST https://photoslibrary.googleapis.com/v1/uploads
// Authorization: Bearer OAUTH2_TOKEN
// Content-type: application/octet-stream
// X-Goog-Upload-File-Name: FILENAME
// X-Goog-Upload-Protocol: raw
[http SetRequestHeader: @"X-Goog-Upload-File-Name" value: @"penguins.jpg"];
[http SetRequestHeader: @"X-Goog-Upload-Protocol" value: @"raw"];
// Assuming the media isn't super large, we'll just read it into memory and send.
// (Another example exists for streaming a large media file directly from the filesystem.)
// Load the media file into memory.
CkoBinData *bdMedia = [[CkoBinData alloc] init];
success = [bdMedia LoadFile: @"qa_data/jpg/penguins.jpg"];
NSString *url = @"https://photoslibrary.googleapis.com/v1/uploads";
CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpBd: @"POST" url: url bd: bdMedia contentType: @"application/octet-stream" response: resp];
if (success == NO) {
NSLog(@"%@",http.LastErrorText);
return;
}
// Examine the response status code. Success is indicated by a status code of 200.
NSLog(@"%@%d",@"response status code: ",[resp.StatusCode intValue]);
// Show the response body.
if ([resp.StatusCode intValue] == 200) {
// Success.
NSLog(@"%@%@",@"Upload token: ",resp.BodyStr);
}
else {
NSLog(@"%@",@"Error:");
NSLog(@"%@",resp.BodyStr);
}
// Clear headers such as X-Goog-Upload-File-Name for subsequent HTTP requests sent on this object..
[http ClearHeaders];