Tag: nsurlsessiondownload

后台传输下载任务失败时closures应用程序

我已经创build了后台nsurlsession来执行下载任务。 当应用程序在后台时,它运行良好。 然而,当我closures应用程序时,下载任务似乎被取消并失败(双击“Home”button并向上滑动),当我重新启动应用程序时,它使我从头开始重新下载。 根据苹果公司的文件,即使应用程序不再运行,后台传输也可以工作。 我做错了什么?

奇怪的NSURLSessionDownloadTask行为通过蜂窝(不是wifi)

我使用远程通知任务启用了后台模式,当应用程序收到推送通知时,可以在后台下载一个小文件(100kb)。 我已经使用configuration下载会话 NSURLSessionConfiguration *backgroundConfiguration = [NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdentifier]; [backgroundConfiguration setAllowsCellularAccess:YES]; self.backgroundSession = [NSURLSession sessionWithConfiguration:backgroundConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 并使用它来激活它 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[hostComponents URL]]; [request setAllowsCellularAccess:YES]; NSMutableData *bodyMutableData = [NSMutableData data]; [bodyMutableData appendData:[params dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:[bodyMutableData copy]]; _downloadTask = [self.backgroundSession downloadTaskWithRequest:request]; [self.downloadTask resume]; 现在一切工作正常,只有当我通过Wifi或通过蜂窝连接,但与iPhone连接到XCODO电缆,如果我断开iPhone,并通过蜂窝接收推送通知代码停止在[self.downloadTask恢复]; 没有调用URL的行。 处理这些操作的类是一个NSURLSessionDataDelegate,NSURLSessionDownloadDelegate,NSURLSessionTaskDelegate等实现: – (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential […]

在下载iOS时stream式传输video

我正在使用iOS 7,我有一个.mp4video,需要在我的应用程序中下载。 video很大(〜1 GB),这就是为什么它不包括在应用程序的一部分。 我希望用户能够在开始下载时立即开始观看video。 我也希望video能够被caching在iOS设备上,以便用户不需要稍后再下载。 播放video的普通方法(渐进式下载和实时stream式传输)似乎不能让您cachingvideo,因此我已经制作了自己的Web服务,将video文件分块并将字节stream式传输到客户端。 我使用NSURLConnection开始HTTPstream式传输: self.request = [[NSMutableURLRequest alloc] initWithURL:self.url]; [self.request setTimeoutInterval:10]; // Expect data at least every 10 seconds [self.request setHTTPMethod:@"GET"]; self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self startImmediately:YES]; 当我收到一个数据块时,我将它追加到本地副本的末尾: – (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:[self videoFilePath]]; [handle truncateFileAtOffset:[handle seekToEndOfFile]]; [handle writeData:data]; } 如果我让设备运行,文件下载成功,我可以使用MPMoviePlayerViewController播放它: NSURL *url=[NSURL fileURLWithPath:self.videoFilePath]; […]

在Swift中用NSURLSession下载一个文件

编译器说,我有2个问题在这里,首先我不能设置NSURLSessionDownloadDelegate一个快速的项目 Type 'ViewController' does not conform to protocol 'NSURLSessionDownloadDelegate' 第二个问题是我找不到NSURLSession方法来下载一个简单的文件 这里是我用来下载简单文件的方式 var url:NSURL = NSURL.URLWithString(fileURL) var request:NSURLRequest = NSURLRequest(URL: url) var downloadTask:NSURLSessionDownloadTask = sessionManager.downloadTaskWithRequest(request) downloadTask.resume() 而这些是我想迅速做出的方法 URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite .. URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location .. URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error ..如果有一种新的方式来下载文件NSURLSession我想知道,什么新的NSURLSession在迅速

在后台进入NSUrlSessionDownloadTask – didCompleteWithError

当我强迫我的设备通过按下电源button进入睡眠模式时,我的后台任务通过调用具有以下错误的委托方法didCompleteWithError停止: 操作无法完成。 不允许操作 我怎样才能configuration我的NSURLSession即使在睡眠模式下继续下载? 这甚至有可能吗? 如果没有,我有什么select? 我需要下载一个300Mb的文件,所以在低连接时,应用程序将在下载结束之前进入睡眠模式。 以下是我的会议的创build: static NSURLSession *backgroundSession; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ backgroundSession = [NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration backgroundSessionConfiguration: @"com.myapp.mytask"] delegate:self. myDelegate delegateQueue:self.myQueue]; }); NSURLSessionDownloadTask *task = [backgroundSession downloadTaskWithRequest: self.urlRequest]; [task resume];

我怎样才能检查一个NSData的Blob是有效的NSURLSessionDownloadTask的resumeData?

我有一个应用程序,使用新的NSURLSession API的后台下载。 当下载取消或以提供NSURLSessionDownloadTaskResumeData的方式失败时,我将存储数据blob,以便稍后可以恢复。 很less的时间我注意到在野外的崩溃: Fatal Exception: NSInvalidArgumentException Invalid resume data for background download. Background downloads must use http or https and must download to an accessible file. 这里发生错误,其中resumeData是NSData blob, session是NSURLSession一个实例: if (resumeData) { downloadTask = [session downloadTaskWithResumeData:resumeData]; … 数据是由Apple API提供的,是序列化的,然后在以后的时间点进行反序列化。 它可能被损坏,但它永远不会为零(如if语句检查)。 如何提前检查resumeData是无效的,这样我就不会让应用程序崩溃?

用NSURLSessionDataTask显示文件下载进度

我想显示特定文件的文件下载进度(接收多less字节)。 它与NSURLSessionDownloadTask正常工作。我的问题是我想实现与NSURLSessionDataTask相同。 下面是将文件接收到NSData并写入文档文件夹的代码: NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]]; NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:theRessourcesURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if(error == nil) { NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *pathToDownloadTo = [NSString stringWithFormat:@"%@/%@", docsDir, Name]; NSLog(@"SIZE : %@",[NSByteCountFormatter stringFromByteCount:data.length countStyle:NSByteCountFormatterCountStyleFile]); […]