Ios 如何使用NSURLSessionConfiguration-POST的backgroundSessionConfiguration
我正在尝试使用Ios 如何使用NSURLSessionConfiguration-POST的backgroundSessionConfiguration,ios,post,nsurlsession,Ios,Post,Nsurlsession,我正在尝试使用NSURLSession将图像上载到服务器,方法是使用POST。每次我可能会有10多张大尺寸的图片。我想做的是,在backgroundSessionConfiguration中执行POST,这样即使用户关闭应用程序,后台上传也不应该停止,并且在完成后显示通知。当我使用backgroundSessionConfiguration从服务器下载NSURLSessionDownloadTask时,每件事都非常完美。但是,当我尝试将它用于POST和NSURLSessionDataTask时,
NSURLSession
将图像上载到服务器,方法是使用POST
。每次我可能会有10多张大尺寸的图片。我想做的是,在backgroundSessionConfiguration
中执行POST
,这样即使用户关闭应用程序,后台上传也不应该停止,并且在完成后显示通知。当我使用backgroundSessionConfiguration
从服务器下载NSURLSessionDownloadTask
时,每件事都非常完美。但是,当我尝试将它用于POST
和NSURLSessionDataTask
时,我发现了下面的错误
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Data tasks are not supported in background sessions.'
*** First throw call stack:
在搜索这个错误后,我发现我们不应该将backgroundSessionConfiguration
与NSURLSessionDataTask
一起使用。我想知道如何实现POST
的后台上传 试试这个
NSURL *URL = [NSURL URLWithString:@"urlString"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = [NSData dataWithContentsOfFile:fileURL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}];
[uploadTask resume];
如果要使用backgroundSessionConfiguration,则不能使用完成块调用。苹果文档在这一点和其他点上非常混乱。在经历了数小时的挫折之后,我成功地实现了后台上传。由于互联网上的信息不多,我决定把我的工作记录下来。
希望这能为您节省一些时间。@johny。若我们希望在后台支持上载任务,则您提出的解决方案不起作用。支持后台上传的正确方法是使用苹果提供的以下方法 *
*后台会话配置不支持NSURLSessionDataTask。只允许在后台下载和上载任务。您可以使用NSURLSessionUploadTask。我们可以使用NSURLSessionUploadTask添加post数据吗。像标题、描述等,还有图片。我从未尝试过,但你可以添加[urlRequestSetHttpMethod:@“POST”];在您的url请求中。我试图添加帖子,但收到此错误“后台会话中的上载任务必须来自文件”后台会话中不允许完成处理程序
/* Creates an upload task with the given request. The body of the request will be created from the file referenced by fileURL */
*- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;*