Ios uploadTaskWithStreamedRequest中出现网络错误

Ios uploadTaskWithStreamedRequest中出现网络错误,ios,iphone,ios7,afnetworking,afnetworking-2,Ios,Iphone,Ios7,Afnetworking,Afnetworking 2,错误 当我尝试 Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file' configurationforNSURLSession工作正常,但当我使用下面的configuration时,应用程序崩溃并给出错误信息 NSURLSessionConfiguration *configuration

错误

当我尝试

Terminating app due to uncaught exception 'NSGenericException', reason: 'Upload tasks in background sessions must be from a file'
configuration
for
NSURLSession
工作正常,但当我使用下面的
configuration
时,应用程序崩溃并给出错误信息

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
例外情况是“后台会话中的上载任务必须来自文件”,这本身就是这个问题的答案

下一行创建后台会话配置

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
它不支持
uploadTaskWithStreamedRequest:
,但可与
uploadTaskWithRequest:request fromFile:

从Apple文档后台上传仅适用于文件。 如果您想在后台上传,请将数据写入文件,然后将该互动程序的url传递给您的后台会话

例外情况是“后台会话中的上传任务必须来自文件”本身就是这个问题的答案

下一行创建后台会话配置

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
它不支持
uploadTaskWithStreamedRequest:
,但可与
uploadTaskWithRequest:request fromFile:

从Apple文档后台上传仅适用于文件。 如果您想在后台上传,请将数据写入文件,然后将该互动程序的url传递给您的后台会话

例外情况是“后台会话中的上传任务必须来自文件”本身就是这个问题的答案

下一行创建后台会话配置

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
它不支持
uploadTaskWithStreamedRequest:
,但可与
uploadTaskWithRequest:request fromFile:

从Apple文档后台上传仅适用于文件。 如果您想在后台上传,请将数据写入文件,然后将该互动程序的url传递给您的后台会话

例外情况是“后台会话中的上传任务必须来自文件”本身就是这个问题的答案

下一行创建后台会话配置

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
它不支持
uploadTaskWithStreamedRequest:
,但可与
uploadTaskWithRequest:request fromFile:

从Apple文档后台上传仅适用于文件。
如果要在后台上传,请将数据写入文件,然后将该磁贴的url传递给后台会话

您应该仅使用
uploadTaskWithRequest:fromFile:
。这里的问题是,您必须将多部分请求内容写入临时文件,然后上载该文件

您应该使用
AFHTTPRequestSerializer:requestWithMultipartFormRequest:writingStreamContentsToFile:completionHandler:
。 参考兰辛的答案

下面是对我有用的示例代码:

[NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
NSString*filePath=[NSTemporaryDirectory()stringByAppendingPathComponent:TEMP_DATA_FILE];
[数据写入文件:文件路径原子:是];
NSURL*filepathURL=[NSURL fileURLWithPath:filePath];
NSString*tempFile=[NSTemporaryDirectory()stringByAppendingPathComponent:TEMP\u MULTI\u PART\u REQUEST\u FILE];
NSURL*filePathtemp=[NSURL fileURLWithPath:tempFile];
AFHTTPRequestSerializer*serializer=[AFHTTPRequestSerializer];
n错误*错误=nil;
NSMutableURLRequest*请求=
[序列化程序multipartFormRequestWithMethod:@“POST”URLString:AppendString(主机\u用于\u服务\u访问,服务\u用于\u多部分\u上载)
参数:参数
构造体WithBlock:^(id formData)
{[formData appendPartWithFileURL:filepathURL名称:@“数据”错误:nil];}
错误:&错误];
__块NSProgress*进度=零;
[序列化程序requestWithMultipartFormRequest:RequestWritingStreamContentStoFile:filePathtemp completionHandler:^(NSError*错误){
NSURLSessionUploadTask*uploadTask=[self.sessionManager uploadTaskWithRequest:Requestfromfile:filePathtemp进度:&进度完成处理程序:^(NSURResponse*response,id responseObject,NSError*error){}];
[上传任务恢复];

记得在事后清理临时文件。

您应该仅使用
uploadTaskWithRequest:fromFile:
。这里的问题是您必须将多部分请求内容写入临时文件,然后上载该文件

您应该使用
AFHTTPRequestSerializer:requestWithMultipartFormRequest:writingStreamContentsToFile:completionHandler:
。 参考兰辛的答案

下面是对我有用的示例代码:

[NSURLSessionConfiguration backgroundSessionConfiguration:kBackgroundSessionIdentifier];
NSString*filePath=[NSTemporaryDirectory()stringByAppendingPathComponent:TEMP_DATA_FILE];
[数据写入文件:文件路径原子:是];
NSURL*filepathURL=[NSURL fileURLWithPath:filePath];
NSString*tempFile=[NSTemporaryDirectory()stringByAppendingPathComponent:TEMP\u MULTI\u PART\u REQUEST\u FILE];
NSURL*filePathtemp=[NSURL fileURLWithPath:tempFile];
AFHTTPRequestSerializer*serializer=[AFHTTPRequestSerializer];
n错误*错误=nil;
NSMutableURLRequest*请求=
[序列化程序multipartFormRequestWithMethod:@“POST”URLString:AppendString(主机\u用于\u服务\u访问,服务\u用于\u多部分\u上载)
参数:参数
构造体WithBlock:^(id formData)
{[formData appendPartWithFileURL:filepathURL名称:@“数据”错误:nil];}
错误:&错误];
__块NSProgress*进度=零;
[序列化程序requestWithMultipartFormRequest:RequestWritingStreamContentStoFile:filePathtemp completionHandler:^(NSError*错误){
NSURLSessionUploadTask*uploadTask=[self.sessionManager uploadTaskWithRequest:Requestfromfile:filePathtemp进度:&进度完成处理程序:^(NSURResponse*response,id responseObject,NSError*error){}];
[上传任务恢复];

记得在事后清理临时文件。

您应该只使用
uploadTaskWithRequest:fromFile:
。这里的问题是您必须将多部分请求内容写入临时文件并