iOS - 向 Copy.com 发送文件上传请求

标签 ios objective-c nsmutableurlrequest

使用新的 Copy.com API。已成功使用 OAuth1 登录并已请求配置文件数据,并且可以成功创建文件夹。

如果您在这里查看 API 文档:https://www.copy.com/developer/documentation#api-calls/filesystem并转到关于向 API 发出 POST 请求以创建新文件的部分, header 的说明对我来说有点奇怪。看这里:

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-TypeContent-Disposition 有多个 header 字段,由 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"];

如您所见,我试图通过在实际正文数据前面附加边界、Content-Disposition 和 Content-Type,然后在末尾附加边界来复制 POST 请求的结构。

最后,我只在 Copy.com 上创建了一个名为“ThankYou.mp3”的文件夹,这就是当您使用空主体数据发出 POST 请求时发生的情况。我向你保证正文数据不为空:-)

有人能帮我吗?

最佳答案

此类中使用的代码经测试可以正常工作:COCopyClient.m

使用库可能更容易:copy-mac-ios-sdk

关于iOS - 向 Copy.com 发送文件上传请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18347788/

相关文章:

ios - Swift 错误 : '(AFHTTPRequestOperation! , NSError? ) -> is not convertible to ' ((AFHTTPRequestOperation? , NSError) -> Void?

iphone - NSMutableURLRequest 在大约 15 秒后超时。超时设置为 240 秒

ios - ios和非ios设备之间的蓝牙连接

ios - 如何使用点击手势从 UIImageView 显示 UIImagePickerController

ios - View Controller 进入 UITabBarController 后台的问题

ios - 在 HTTPBody 中设置一个 NSDictionary 并使用 POST 方法发送

ios - 尝试使用 NSMutableURLRequest 将非常大的 JSON 字符串上传到服务器时获取响应状态代码 : 404, header

ios - 可以解析缓存替换核心数据

objective-c - EXC_BAD_ACCESS 从 NSValue 获取值

objective-c - 以编程方式更改值时调用 NSControl 的 "valueChanged"