2015-01-20 4 views
0

Я пытаюсь загрузить изображение из своего приложения в onedrive с помощью REST api, который они предоставили. Но пропуская некоторые формы для метода PST, пожалуйста, помогите разобраться. Я делаю так,iOS-Загрузить изображение в OneDrive с помощью REST API

NSString *urlString = [NSString stringWithFormat:@"https://apis.live.net/v5.0/me/skydrive/files?access_token=%@",oneDriveAccessToken]; 
NSMutableURLRequest *request =[[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"A300x"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

//-- Append data into post url using following method 
NSMutableData *body = [NSMutableData data]; 

//-- "image_name" is file name of the image (we can set custom name) 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name=\"file\"; filename=\"%@\"\n",@"name.JPG"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Type: application/octet-stream\n\r\n\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:data]]; 
[body appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


//-- Sending data into server through URL 
[request setHTTPBody:body]; 

//-- Getting response form server 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

//-- JSON Parsing with response data 
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil]; 
NSLog(@"Result = %@",result); 

Я получаю ответ, как:

Result = { 
    error =  { 
     code = "request_body_invalid"; 
     message = "The request entity body for multipart form-data POST isn't valid. The expected format is: 
\n--[boundary] 
\nContent-Disposition: form-data; name=\"file\"; filename=\"[FileName]\" 
\nContent-Type: application/octet-stream 
\n[CR][LF] 
\n[file contents] 
\n--[boundary]--[CR][LF]"; 
    }; 
} 

Я после этой http://msdn.microsoft.com/en-us/library/hh826531.aspx#uploading_files

После предложений Jeffery, сообщение об ошибке, как,

Result = { error = { code = "request_body_invalid"; message = "The 
request entity body has an incorrect value in the 'Content-Disposition' 
header. The expected format for this value is 'Content-Disposition: form- 
data; name=\"file\"; filename=\"[FileName]\"'."; }; } 
+0

Не использовать свою обертку iOS? http://msdn.microsoft.com/en-us/library/dn631816.aspx – user523234

+0

К сожалению - нет! – preetam

ответ

2

Как вы думаете, вы управляете окончаниями строк. Иногда вы используете \n иногда \r\n. Вы всегда должны использовать \r\n. В качестве дополнительной заметки вам не понадобится начальный \r\n на первом вызове -appendData. Наконец, проверьте свою граничную строку: они обычно длиннее, чтобы избежать того, чтобы те же самые байты в содержимом.

NSString *boundary = @"A300x-make-it-longer-to-reduce-risk-12345"; 

… 

[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name=\"file\"; filename=\"%@\"\r\n", @"name.JPG"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[NSData dataWithData:data]]; 

[body appendData:[[NSString stringWithFormat:@"--%@--", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

спасибо за ответ ... теперь получаем эту ошибку 'Результат = { error = { code =" request_body_invalid "; message = "Тело объекта запроса имеет неправильное значение в заголовке Content-Disposition. Ожидаемым форматом для этого значения является« Content-Disposition: form-data; name = \ "file \"; filename = \ "[ Имя файла]\"'."; }; } ' – preetam

+0

попытался удалить расширение файла, но не работал – preetam

+0

, способный заставить его работать .. чеки! – preetam

Смежные вопросы