2013-08-21 2 views
1

Работа с новым API Copy.com. Успешно вошли в систему с OAuth1 и сделали запросы на данные профиля и могут успешно создавать папки.iOS - загрузка POST-файлов на Copy.com

Если вы посмотрите документы API здесь: https://www.copy.com/developer/documentation#api-calls/filesystem и перейдите к разделу о создании POST запросов API для создания новых файлов, инструкции для заголовков немного странны для меня. Смотрите здесь:

Content-Type:multipart/form-data; boundary=----WebKitFormBoundary5dcD4Bk7SevSsaMg 

Content-Disposition: form-data; name="X-Api-Version" 

1.0 
------WebKitFormBoundary5dcD4Bk7SevSsaMg 
Content-Disposition: form-data; name="file"; filename="animation.gif" 
Content-Type: image/gif 

<BASE64 ENCODED FILE STRUCTURE> 
------WebKitFormBoundary5dcD4Bk7SevSsaMg-- 

Как вы можете видеть, есть несколько полей заголовка для Content-Type и Content-Disposition, разделенных параметром boundary. При использовании NSMutableURLRequest и -setValue:forHTTPHeaderField я просто перезаписываю предыдущие значения. Вот что у меня есть для моего полого заголовка:

NSString *boundaryString = @"----WebKitFormBoundary5dcD4Bk7SevSsaMg"; 
NSString *disposition = @"Content-Disposition: form-data; name=\"ThankYou.mp3\" filename=\"ThankYou.mp3\""; 
NSString *type = @"Content-Type: audio/mp3"; 
NSData *dispositionData = [disposition dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *typeData = [type dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *boundaryData = [boundaryString dataUsingEncoding:NSUTF8StringEncoding]; 
NSMutableData *songData = [NSMutableData data]; 
[songData appendData:boundaryData]; 
[songData appendData:dispositionData]; 
[songData appendData:typeData]; 
[songData appendData:mp3Data]; //initiated before. From my mainBundle. 
[songData appendData:boundaryData]; 
[request setHTTPBody:songData]; 

[self.myAuth authorizeRequest:request]; 
[request setValue:@"1" forHTTPHeaderField:@"X-Api-Version"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"multipart/form-data; boundary=----WebKitFormBoundary5dcD4Bk7SevSsaMg" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"form-data; name=\"X-Api-Version\"=1.0" forHTTPHeaderField:@"Content-Disposition"]; 

Как вы можете видеть, я попытался повторить структуру запроса POST путем добавления границы, Content-Disposition и Content-Type перед фактическими данными Body , а затем добавьте границу в конце.

В конце этого я создал только папку «ThankYou.mp3» на Copy.com, что происходит, когда вы делаете запрос POST с пустыми данными тела. Уверяю вас, данные тела не пустые :-)

Может ли кто-нибудь помочь мне здесь?

ответ

2

Код, используемый в этом классе тестируется на работу: COCopyClient.m

Это может быть проще просто использовать библиотеку: copy-mac-ios-sdk

+0

свят сек ## т! Это именно то, что мне нужно :-) Спасибо! – Justin

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