Help Center> Object Storage Service> SDK Reference> iOS> Object Download> Performing a Conditioned Download

Performing a Conditioned Download

When downloading an object, you can specify one or more conditions. Only when the conditions are met, the object will be downloaded. Otherwise, an exception indicating a download failure will be thrown.

You can set the following conditions:

Parameter

Description

Method in OBS iOS SDK

ifModifiedSince

Returns the object if it is modified after the time specified by this parameter; otherwise, an exception is thrown.

request.ifModifiedSince

ifUnmodifiedSince

Returns the object if it remains unchanged since the time specified by this parameter; otherwise, an exception is thrown.

request.ifUnmodifiedSince

ifETagMatch

Returns the source object if its ETag is the same as the one specified by this parameter; otherwise, an exception is thrown.

request.ifETagMatch

ifETagNoneMatch

Returns the source object if its ETag is different from the one specified by this parameter; otherwise, an exception is thrown.

request.ifETagNoneMatch

  • The ETag of an object is the MD5 check value of the object.
  • If the specified condition is not met, error Precondition Failed will be returned.

Sample code:

static OBSClient *client;
NSString *endPoint = @"your-endpoint";
NSString *SK = @"*** Provide your Secret Key ***";
NSString *AK = @"*** Provide your Access Key ***";
    
// Initialize identity authentication.
OBSStaticCredentialProvider *credentialProvider = [[OBSStaticCredentialProvider alloc] initWithAccessKey:AK secretKey:SK];
    
//Initialize service configuration.
OBSServiceConfiguration *conf = [[OBSServiceConfiguration alloc] initWithURLString:endPoint credentialProvider:credentialProvider];
    
// Initialize an instance of OBSClient.
client = [[OBSClient alloc] initWithConfiguration:conf];
    
// Streaming download
OBSGetObjectToDataRequest *request = [[OBSGetObjectToDataRequest alloc]initWithBucketName:@"bucketname" objectKey:@"objectname"];
    
// Set conditions.
request.ifModifiedSince = [[OBSUtils getDateFormatterRFC1123]dateFromString:@"Mon, 18 Dec 2017 03:50:49 GMT"];
// Check whether the ETags are the same.
request.ifETagMatch = @"123223";
    
    
//Query the download progress.
request.downloadProgressBlock = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
    NSLog(@"%0.1f%%",(float)(totalBytesWritten)*100/(float)totalBytesExpectedToWrite);
};
    
// Receive downloaded data.
__block NSMutableData *objectData = [NSMutableData new];
request.onReceiveDataBlock = ^(NSData *data) {
    [objectData appendData:data];
};
    
// Download result
[client getObject:request completionHandler:^(OBSGetObjectResponse *response, NSError *error){
    NSLog(@"%@",response);
}] ;

When calling OBSGetObjectToFileRequest, you can set background to YES to enable background download.