2013-06-21 30 views
1

我正在從iOS本機應用程序獲取salesforce的附件。如何在ios中訪問Salesforce附件正文(base64二進制數據)?

我必須在我的iPhone應用程序中顯示特定對象(如Leads,Contacts等)的salesforce附件。爲此,我使用了Rest Api並獲得了響應正文。但在響應身體有url,但我想附件身體的二進制數據。

這裏是我的代碼:

我的REST API請求

NSString *attachments=[NSString stringWithFormat:@"select Name,Body, ContentType from Attachment"]; 
SFRestRequest *request = [[SFRestAPI sharedInstance] requestForQuery:attachments]; 
[[SFRestAPI sharedInstance] send:request delegate:self]; 

我得到了身體的反應在以下格式:

{ 
    Body = "/services/data/v23.0/sobjects/Attachment/00P90000004SRFlEAO/Body"; 
    ContentType = "application/video"; 
    Name = "Video.MOV"; 
    attributes =  { 
     type = Attachment; 
     url = "/services/data/v23.0/sobjects/Attachment/00P90000004SRFlEAO"; 
    }; 
} 

回答

1

你必須做一個GET請求到正文字段中返回的URL以獲取實際的二進制內容。

+0

謝謝您的回答,但請澄清正是我所要做的,哪些參數必須通過與URL請求我。應此要求網址 - 實例網址+附件正文網址 – YogiBhoi

0
Check this code: 
id url = @"http://blogs.independent.co.uk/wp-content/uploads/2012/12/google-zip.jpg"; 
[self getImageBase64:url]; 


-(NSString *) AFBase64EncodedStringFromString: (NSData*) data 
{ 
NSUInteger length = [data length]; 
NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2)/3) * 4]; 

uint8_t *input = (uint8_t *)[data bytes]; 
uint8_t *output = (uint8_t *)[mutableData mutableBytes]; 

for (NSUInteger i = 0; i < length; i += 3) { 
    NSUInteger value = 0; 
    for (NSUInteger j = i; j < (i + 3); j++) { 
     value <<= 8; 
     if (j < length) { 
      value |= (0xFF & input[j]); 
     } 
    } 

    static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 

    NSUInteger idx = (i/3) * 4; 
    output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F]; 
    output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F]; 
    output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6) & 0x3F] : '='; 
    output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0) & 0x3F] : '='; 
} 

return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding]; 
} 



-(NSString *) getImageBase64:(NSString *) url 
{ 

NSURLRequest *   imageUrlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; 

NSURLResponse * response=nil; 
NSError * error =nil; 
NSData * data = [NSURLConnection sendSynchronousRequest:imageUrlRequest returningResponse:&response error:&error]; 

if(error == nil) 
{ 
    return [self AFBase64EncodedStringFromString:data]; 
} 

return nil; 

} 
2

使用此代碼獲取身體網址下載後:

SFRestRequest* downloadRequest = [self requestForFileContents:@"/services/data/v23.0/sobjects/Attachment/00P90000004SRFlEAO/Body"]; 

- (SFRestRequest *) requestForFileContents:(NSString *) path { 
NSMutableDictionary *params = [NSMutableDictionary dictionary]; 
SFRestRequest *request = [SFRestRequest requestWithMethod:SFRestMethodGET path:path queryParams:params]; 
request.parseResponse = NO; 
return request;} 
+0

真的爲我節省了很多時間.... –

相關問題