2013-06-21 6 views
1

Я работаю над собственным приложением iOS для получения вложений от salesforce.Как получить доступ к кумулятивной части Salesforce (бинарные данные base64) в ios?

Я должен показать приложения для продаж в моем приложении iPhone для конкретного объекта, такого как Leads, Contacts и т. Д. Для этого я использую Rest Api и получил тело ответа. Но в ответном теле есть url, но я хочу двоичные данные тела приложения.

Вот мой код:

Мой запрос остальные апи

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-адресу, возвращенному в поле Body, для получения фактического двоичного содержимого.

+0

Спасибо за ваш ответ, но, пожалуйста, уточнить, что именно я должен делать, какие параметры должны быть пройти с запросом URL .Should я заказываю это URL-адрес: URL-адрес экземпляра + 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

Используя этот код для загрузки после того, как URL прибудет тело:

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

Действительно сэкономил много времени для меня .... –