ios – 后台会话不支持从NSData上传任务

我正在尝试使用Share扩展上传图像,但问题是当我添加后台任务时它给了我这个错误,它说后台任务不支持nsdata但是wwdc会话正在nsdata中上传图像.你能告诉我问题在哪里吗?以及我如何解决

后台会话不支持从NSData上载任务

Nsstring *boundary = @"SportuondoFormBoundary";

Nsstring * configurationName = @"com.xxxxxxxx.PhotoSharing.backgroundConfiguration";

NSURLSessionConfiguration *configuration= [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationName];
[configuration setSharedContainerIdentifier:kGroupNametoShareData];


configuration.HTTPAdditionalHeaders = @{
                                        @"api-key"       : @"55e76dc4bbae25b066cb",@"Accept"        : @"application/json",@"Content-Type"  : [Nsstring stringWithFormat:@"multipart/form-data; boundary=%@",boundary]
                                        };

NSURLSession *session=[NSURLSession  sessionWithConfiguration:configuration delegate:self delegateQueue:nil];


NSMutableData *body = [NSMutableData data];


for (Nsstring *key in parameters)
{
    [body appendData:[[Nsstring stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[Nsstring stringWithFormat:@"Content-disposition: form-data; name=\"%@\"\r\n\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[Nsstring stringWithFormat:@"%@\r\n",[parameters objectForKey:key]] dataUsingEncoding:NSUTF8StringEncoding]];

}

NSData *imageData = UIImageJPEGRepresentation(image,0.8);
NSLog(@"imageDATE,%@",imageData);
if (imageData)
{
    [body appendData:[[Nsstring stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[Nsstring stringWithFormat:@"Content-disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n",@"file"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: image/jpg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:imageData];
    [body appendData:[[Nsstring stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[Nsstring stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];




// Data uploading task. We Could use NSURLSessionUploadTask instead of NSURLSessionDataTask if we needed to support uploads in the background
NSURL *url = [NSURL URLWithString:[Nsstring stringWithFormat:@"%@%@",kURLBase,kURLAddPostDL]];
NSLog(@"url %@",url);
NSMutableuRLRequest *request = [NSMutableuRLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10000];
request.HTTPMethod = @"POST";
request.HTTPBody = body;



NSURLSessionUploadTask *upload=[session uploadTaskWithRequest:request fromData:request.HTTPBody];
[upload resume];

解决方法

看来Up NSURLSessionUploadTask不支持大尺寸NSData,
但是你可以给NSURLSessionUploadTask一个文件路径上传到服务器上,或者把你的图像暂时写在磁盘上然后给出路径.

这是一个上传文件路径和NSdata的例子.

Uploads using backgroundSessionConfiguration and NSURLSessionUploadTask cause app to crash

更新 :

//Create a file to upload
UIImage *image = [UIImage imageNamed:@"[email protected]"];
NSData *imageData = UIImagePNGRepresentation(image);
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *URLs = [fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
Nsstring *documentsDirectory = [[URLs objectAtIndex:0] absoluteString];

//这是filePath URL

Nsstring *filePath = [documentsDirectory stringByAppendingString:@"testfile.png"];
[imageData writetoFile:filePath atomically:YES];
NSMutableuRLRequest *request = [[NSMutableuRLRequest alloc] initWithURL:[NSURL URLWithString:@"https://file.upload/destination"]];
[request setHTTPMethod:@"PUT"];

//这里使用的是filePath.

NSURLSessionUploadTask *uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:[NSURL URLWithString:filePath] completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
    //code
}];

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...