API загрузки файлов Box с использованием Objective C

Я некоторое время пытался использовать Box 2.0 API для загрузки файла из клиента Objective C в папку Box. Я прочитал несколько сообщений от:

Я успешно пытался использовать Curl, как указано в документации, но всегда получаю 404 при попытке создать NSMutableUrlRequest. Это мой код:

NSURL *URL = [NSURL URLWithString:@"https://api.box.com/2.0/files/content"];
    urlRequest = [[NSMutableURLRequest alloc]
                  initWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData
                  timeoutInterval:30];
    [urlRequest setHTTPMethod:@"POST"];
    AppDelegate *appDelegate = [AppDelegate sharedDelegate];
    NSString *p = [NSString stringWithFormat:@"BoxAuth api_key=%@&auth_token=%@",API_KEY,appDelegate.boxAuthToken];
    [urlRequest setValue:p forHTTPHeaderField:@"Authorization"];
    [urlRequest setValue:@"multipart/form-data, boundary=AaB03x" forHTTPHeaderField:@"Content-Type"];

    NSString *postBody = @"--AaB03x"
            @"content-disposition: form-data; name=\"filename\"; filename=\"test.txt\";"
            @"folder_id=466838434"
            @"Content-type: text/plain"
            @""
            @"testing box api 2.0"
            @""
            @"--AaB03x--";

    NSData *data = [postBody dataUsingEncoding:NSUTF8StringEncoding];
    [urlRequest setHTTPBody:data];
    [urlRequest setValue:[NSString stringWithFormat:@"%d",[data length]] forHTTPHeaderField:@"Content-Length"];

person rishabh    schedule 05.11.2012    source источник


Ответы (2)


Есть несколько проблем, которые я вижу в том, как вы строите postBody. Наличие новых строк между строковыми литералами в вашем коде просто объединяет их. На самом деле вам нужно иметь возврат каретки и перевод строки, чтобы разделить разные части вашего тела HTTP. Кроме того, вы объединили оба элемента формы в один. Файл и folder_id — это два отдельных элемента формы. Вы можете попробовать что-то вроде этого:

NSString *postBody = @"\r\n--AaB03x\r\n"
                      "Content-Disposition: form-data; filename=\"test.txt\"\r\n"
                      "Content-Type: text/plain\r\n\r\n"
                      "testing box api 2.0"
                      "\r\n--AaB03x\r\n"
                      "Content-Disposition: form-data; name=\"folder_id\";\r\n\r\n"
                      "0"
                      "\r\n--AaB03x--\r\n\r\n";

Я думаю, что это должно работать, если все остальное настроено правильно.

person Vova Galchenko    schedule 06.11.2012

Используйте http://allseeing-i.com/ASIHTTPRequest/.

Это значительно упрощает работу с составными формами!

person Max Woolf    schedule 05.11.2012
comment
Пожалуйста, не публикуйте api_key и auth_tokens в сообщениях на форуме, это равносильно публикации вашего имени пользователя и пароля. Я собираюсь предложить вам отредактировать свой комментарий, вытащить детали, а также сделать недействительными ваши токены авторизации в Box. - person Peter; 05.11.2012