【发布时间】:2014-09-30 14:37:32
【问题描述】:
我在 iOS 应用程序中有一个使用 NSURLSessionUploadTask 的视频上传系统。视频文件保存到NSURL,所以我在上传方法中使用了以下代码:
request.HTTPMethod = @"POST";
[request addValue:@"file" forHTTPHeaderField:@"fileName"];
// Create upload task
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromFile:filePath completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(!error) {
// handle success
} else {
// handle error
}
}];
// Run the task
[task resume];
我有一个在 nginx 下运行的 PHP 服务器(使用 Laravel)来处理这个上传。我已经用 Postman 对其进行了测试,它可以很好地接受上传(期望一个名为“file”的文件)。
当我运行上面的 objc 代码时,服务器告诉我没有上传文件($_FILES 数组为空)。
我尝试过设置和不设置“fileName”标头,并且尝试将“Content-Type”设置为“multipart/form-data”,但这些都不起作用。
如何让NSURLSessionUploadTask 正确地将这些文件(从NSURL)上传到服务器?
这篇文章似乎详细描述了一个类似的问题:NSURLSessionUploadTask not passing file to php script
【问题讨论】:
-
您的文件中有什么?请记住,PHP 会期望正文看起来像 form-based file upload,并且 uploadTaskWithRequest 不会做任何“智能”的事情——我相信它只是将您的文件作为正文数据发送。
-
通过仅使用 AFNetworking 并通过“手动”(base64 编码等)编写身份验证标头来解决身份验证问题解决了这个问题。
标签: php objective-c file-upload nsurlsession nsurlsessionuploadtask