Sample code for 30+ languages & platforms
Objective-C

Use an Azure Service SAS

See more Azure Cloud Storage Examples

Shows how to use an Azure Service SAS. (In this case, it is an SAS for a blob.)

Chilkat Objective-C Downloads

Objective-C
#import <CkoRest.h>
#import <CkoStringBuilder.h>
#import <CkoBinData.h>

BOOL success = NO;

// Azure Blob Service Example: Upload binary bytes to a block blob.
// This uses a Service SAS for Authorization.

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

CkoRest *rest = [[CkoRest alloc] init];

// Connect to the Azure Storage Blob Service
BOOL bTls = YES;
int port = 443;
BOOL bAutoReconnect = YES;
// In this example, the storage account name is "chilkat".
success = [rest Connect: @"chilkat.blob.core.windows.net" port: [NSNumber numberWithInt: port] tls: bTls autoReconnect: bAutoReconnect];
if (success != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

// ----------------------------------------------------------------------------------------------
// The code above this comment could be placed inside a function/subroutine within the application
// because the connection does not need to be made for every request.  Once the connection is made
// the app may send many requests..
// ----------------------------------------------------------------------------------------------

// Note: The application does not need to explicitly set the following
// headers: Content-Length, x-ms-date, Authorization.  These headers
// are automatically set by Chilkat.

// Let's load a previously computed Azure Storage Account SAS token and use it.
// See How to Create an Azure Service SAS
CkoStringBuilder *sbToken = [[CkoStringBuilder alloc] init];
success = [sbToken LoadFile: @"qa_data/tokens/azureStorageServiceSas.txt" charset: @"utf-8"];
if (success != YES) {
    NSLog(@"%@",@"Failed to load SAS token.");
    return;
}

// Add the Shared Access Signature query params for authorization.
[rest AddQueryParams: [sbToken GetAsString]];

// IMPORTANT: Make sure to set the x-ms-blob-type header:
success = [rest AddHeader: @"x-ms-blob-type" value: @"BlockBlob"];

// IMPORTANT: Make sure to add the x-ms-date header.
// When the header name is "x-ms-date", Chilkat will recognize the keyword "NOW" 
// and will substitute the current system date/time formatted as required by Microsoft.
success = [rest AddHeader: @"x-ms-date" value: @"NOW"];

// For this example, we'll just load a JPG file into memory..
CkoBinData *binData = [[CkoBinData alloc] init];
success = [binData LoadFile: @"qa_data/jpg/starfish.jpg"];
if (success != YES) {
    NSLog(@"%@",@"Failed to load JPG file.");
    return;
}

// Note: The maximum size of a block blob created by uploading in a single step is 64MB.  
// For larger files, the upload must be broken up into blocks.  There is another Chilkat example for that..
CkoStringBuilder *sbResponse = [[CkoStringBuilder alloc] init];
success = [rest FullRequestBd: @"PUT" uriPath: @"/mycontainer/starfish.jpg" binData: binData responseBody: sbResponse];
if (success != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

// When successful, the Azure Storage service will respond with a 201 response status code,
// with no response body.
if ([rest.ResponseStatusCode intValue] != 201) {
    // Examine the request/response to see what happened.
    NSLog(@"%@%d",@"response status code = ",[rest.ResponseStatusCode intValue]);
    NSLog(@"%@%@",@"response status text = ",rest.ResponseStatusText);
    NSLog(@"%@%@",@"response header: ",rest.ResponseHeader);
    NSLog(@"%@%@",@"response body (if any): ",[sbResponse GetAsString]);
    NSLog(@"%@",@"---");
    NSLog(@"%@%@",@"LastRequestStartLine: ",rest.LastRequestStartLine);
    NSLog(@"%@%@",@"LastRequestHeader: ",rest.LastRequestHeader);
    NSLog(@"%@",@"Failed.");
    return;
}

NSLog(@"%@",@"Success.");