5

我想上传一个大文件2GB在后台使用NSURLSessionUploadTask。该服务使用多部分格式,所以为了上传它在后台我创建一个临时文件与请求的身体,然后我使用uploadTask来安排上传,当文件完成上传我删除临时文件。NSURLSession背景上传大文件

NSURLSessionUploadTask *uploadTask = [[self backgroundNSURLSession] uploadTaskWithRequest:uploadRequest fromFile:filePath]; [uploadTask resume];

对于较小的则1.4 GB上传文件的工作确定,但是当我尝试上传2 GB的视频文件,上传失败。服务器正在返回错误消息,我没有附加该文件。

我正在将上传组件从ASIHTTP重构为NSURLSession,如果我使用ASIHTTP进行上载,即使对于大型文件也是如此。

这是我如何创建我的NSURLSession:

if ([NSURLSessionConfiguration respondsToSelector:@selector(backgroundSessionConfigurationWithIdentifier:)]) { 
     self.configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:appID]; 
    } else { 
     self.configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:appID]; 
    } 
    self.configuration.HTTPMaximumConnectionsPerHost = 1; 
    self.configuration.discretionary = YES; 
    self.configuration.timeoutIntervalForResource = 60*60; 
    self.configuration.timeoutIntervalForRequest = 60*60; 
    backgroundSession = [NSURLSession sessionWithConfiguration:self.configuration delegate:self delegateQueue:nil]; 

所以,问题是只针对大文件,对于小文件进行上传。有没有其他人遇到同样的问题?

+0

你确定它不是像timeoutIntervalForResource太简单吗? – 2015-06-22 12:18:58

+0

我不确定这是否仍然有用,但是,我将timeIntervalForResource和forRequest更改为一个巨大的值并仍然是相同的问题。 – 2016-10-31 11:22:44

+1

你问这个问题后2年,那是一个很大的时间间隔! – 2016-10-31 14:43:04

回答

0

根据苹果开发者对012财产discretionary 的描述,如果文件太大,系统可能会等待像WIFI连接那样的好时机。

将任意属性切换为NO并重试。祝你好运!

self.configuration.discretionary = NO;

+0

也许不回答这个问题,您需要确定,并提供支持您的回答 – 2017-09-21 08:21:21

+0

的事实对不起!据了解......这是我的第一个回答 – vibroto 2017-09-21 08:33:35

+0

这是一个老问题,现在并不真正相关,也许这是一个iOS SDK错误或服务器错误,谁知道。 – 2017-09-21 13:11:27