1

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

如文档中所述,我已尝试成功使用Curl.,但在尝试创建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"];
4

2 回答 2

3

我看到您构建 postBody 的方式存在几个问题。在代码中的字符串文字之间添加换行符只是将它们连接起来。您实际上需要有回车和换行来分隔 HTTP 正文的不同部分。此外,您将两个表单元素混合在一起。file 和 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";

我认为只要其他一切都正确设置,这应该可以工作。

于 2012-11-06T06:21:29.267 回答
0

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

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

于 2012-11-05T13:05:55.730 回答