使用Objective C的Box File Upload API

时间:2012-11-05 11:33:24

标签: iphone objective-c ipad box-api

我一直在尝试使用Box 2.0 API将文件从Objective C客户端上传到我的Box文件夹。我读了几篇文章:

我已尝试成功使用Curl,如文档中所述,但在尝试创建NSMutableUrlRequest时总是获得404。 这是我的代码:

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"];

2 个答案:

答案 0 :(得分:3)

我看到你在构建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";

我认为如果其他所有内容都已正确设置,那么应该可行。

答案 1 :(得分:0)

使用http://allseeing-i.com/ASIHTTPRequest/

这使得处理多部分表单变得更加容易!