首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS的盒子文件上传接口不起作用

iOS的盒子文件上传接口不起作用
EN

Stack Overflow用户
提问于 2015-06-15 05:53:03
回答 1查看 440关注 0票数 0

我试图上传一个文件到一个盒子帐户使用盒子的HTTP API (不是iOS软件开发工具包),但由于某些原因,它不能工作,并返回状态代码400。在下面的代码中我的错误是什么?

代码语言:javascript
复制
NSString *uploadURL = @"https://upload.box.com/api/2.0/files/content";
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:uploadURL]];
[request setHTTPMethod:@"POST"];

[request addValue:[NSString stringWithFormat:@"Bearer %@", @"box_access_token_here"] forHTTPHeaderField:@"Authorization"];

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

[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"attributes\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/json\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"'{\"name\":\"%@\", \"parent\":{\"id\":\"%@\"}}'", @"file_name", @"box_folder_id"] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"file\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", @"mime_type"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:UIImageJPEGRepresentation(someUIImage, 1.0)];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)body.length] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:body];

NSURLSessionUploadTask *uploadTask = [upLoadSession uploadTaskWithRequest:request fromData:body completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if (error) {
        NSLog(@"%@", error.debugDescription);
    } else {
        NSLog(@"%@", @"Successfully uploaded");
    }
}];

[uploadTask resume];
EN

回答 1

Stack Overflow用户

发布于 2015-07-07 23:22:44

我不确定代码出了什么问题,但当我尝试以这里描述的https://box-content.readme.io/#upload-a-file的方式实现上传时,我得到了相同的400 Bad Request

我最终复制了Android示例代码使用的行为-它与API文档中的行为略有不同:

代码语言:javascript
复制
Content-Type: multipart/form-data; boundary=dcf6d5da-6b79-4d80-8503-9ca17037e7c3
Content-Length: 757
--dcf6d5da-6b79-4d80-8503-9ca17037e7c3
Content-Disposition: form-data; name="parent_id"
Content-Type: text/plain; charset=UTF-8
Content-Length: 10
Content-Transfer-Encoding: binary

3973764013
--dcf6d5da-6b79-4d80-8503-9ca17037e7c3
Content-Disposition: form-data; name="filename"; filename="your-file-name"
Content-Type: text/html
Content-Length: 300
Content-Transfer-Encoding: binary

your file binary content goes here
--dcf6d5da-6b79-4d80-8503-9ca17037e7c3--

请注意parent_idfilename部件是如何使用的-这与API文档中的建议形成了鲜明的对比。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30834939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档