onezens / ycdownloadsession Goto Github PK
View Code? Open in Web Editor NEWiOS background download video or file lib
License: MIT License
iOS background download video or file lib
License: MIT License
手机信息 (please complete the following information):
如何复现
比如我现在一个视频A下载完成了,我退出APP后再打开,偶尔会出现已完成的视频A的状态变成未完成状态
现在下载的路径是在沙盒里的cache里?
可以修改为document文件夹吗
1.建议博主把本地通知的名称更改一下,改换成 配置后台下载 identifier 的形式.
2.设置最大下载数是不是必须的.有这么一种情况,当添加了两个下载任务,未设置最大下载数,显示只有一个在刷新的下载.这个时候退到后台,我们什么都不管该APP,在某个时候进去,早先开始下载的那个已经下载完成了,剩下一个不动了.必须手动点击两次才刷新下载.进去的时候是显示了启动页的,时间不短,是不是因为后台杀死了,下载单例已经干掉了?下载文件大小200M-300M 不等.而且有的时候,通过点击启动的下载的文件有不完整的情况.
如果下载的URL不是直接访问文件服务中的文件,如:http://ftdq.demo.xiaoi.com/robot-ftjd/DownLoadServlet?fileId=8926e36975d743bca1c455f035f12c24,URL中是不带文件后缀的,服务器端断点续传是通过读流下载的。
手机信息 (please complete the following information):
如何复现
开启下载任务后,APP切换到后台,在唤醒以后,下载任务不继续。
demo 也是这个问题。
感谢分享!!看了几天源代码,有一些问题指出来,望修正:
1.下载没有对非200的情况进行处理(没有对接收到响应这个回调进行处理),导致下载地址是错误的还能把错误的信息写入文件。
2.我用的版本是YCDownloadSession(1.2.3),在初始化Session的时候并没有暂停所有下载,导致手动杀掉app会暂停,但是通过xcode杀掉或者程序crash下次启动app状态还是正在下载。
3.类型转换有问题,content-length是long long类型,直接把已下载大小(downloadedSize)和文件大小(fileSize)用nsinter类型强转,这样导到32位机型nsinter会超出取值范围,只能下载2G以下的视频。
4.没有对302重定向进行处理
类方法 downloadSession 和 属性downloadSession冲突了,把单例方法名改一下
下载PDF、Word、Excel、TXT,下载完成后,在其他页面清除缓存,调用[FotileDownloadManager videoCacheSize]获取缓存大小适中为0,这个方法只能获取视频缓存大小么?
队列已经加进去了,点击开始,还是没反应。。。好尴尬呀
如果下载URL再暂停下载后,有时候会变化,我看代码里YCDownloadTask就会获取不到了,因为YCDownloadTask是根据下载url和fileId标记的,URL变化会影响断点续传吗,按理说请求头里的那2个参数正确,就可以吧,我改变YCDownloadTask的taskId的存储方式可以吗
难道说只能用于下载视频吗?
Session程序崩溃后,重新启动程序!后台下载还是在进行,这样我开始原来的下载,会有两个相同的NSURLSessionDownloadTask进行,但是他们都可以找到 YCDownloadTask *task = [self getDownloadTaskWithUrl:[YCDownloadTask getURLFromTask:downloadTask]];同一个YCDownloadTask,如何避免这种问题?
#define kCommonUtilsGigabyte (1024 * 1024 * 1024)
#define kCommonUtilsMegabyte (1024 * 1024)
#define kCommonUtilsKilobyte 1042
应该改为
#define kCommonUtilsGigabyte (1000 * 1000 * 1000)
#define kCommonUtilsMegabyte (1000 * 1000)
#define kCommonUtilsKilobyte 1000
吧
据说在iOS上是1000不是1024
实际操作也是这样
连续切换网络环境返回app,会出现2个task同时下载一个item的情况,进度就会闪2个task下载的进度
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
错误或者奔溃信息
复制粘贴相关信息或者截图
友情提示
发生问题,或者有疑问时,请仔细参照demo的实现逻辑。为了能够快速解决,请严格按照本模板描述,并且将你的问题在demo的复现过程详细描述出来。
有能力的同学,请自行debug问题的原因,然后进行反馈。或者找到解决办法后发起pull request。
多用户切换数据
手机信息 (please complete the following information):
如何复现
调用
2018-06-29 16:02:45.879763+0800 BoardCast[822:182922] Attempted to create a task in a session that has been invalidated 2018-06-29 16:02:45.885497+0800 BoardCast[822:182922] dynamic_cast error 2: One or more of the following type_info's has hidden visibility. They should all have public visibility. N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE. 2018-06-29 16:02:45.885675+0800 BoardCast[822:182922] dynamic_cast error 2: One or more of the following type_info's has hidden visibility. They should all have public visibility. N10__cxxabiv116__shim_type_infoE, id, N10__cxxabiv117__pbase_type_infoE. 2018-06-29 16:02:46.008594+0800 BoardCast[822:182922] [Bugly] Trapped uncaught exception 'NSGenericException', reason: 'Task created in a session that has been invalidated' ( 0 CoreFoundation 0x000000018550a37c <redacted> + 148 1 libobjc.A.dylib 0x0000000184750528 objc_exception_throw + 56 2 CFNetwork 0x0000000185b46060 <redacted> + 0 3 CFNetwork 0x0000000185b44f68 <redacted> + 36 4 CFNetwork 0x0000000185b43790 <redacted> + 76 5 libdispatch.dylib 0x000000010492128c _dispatch_client_callout + 16 6 libdispatch.dylib 0x000000010492ebc8 _dispatch_queue_barrier_sync_invoke_and_complete + 120 7 CFNetwork 0x0000000185b436f0 <redacted> + 144 8 CFNetwork 0x0000000185b44ed0 <redacted> + 188 9 YCDownloadSession 0x0000000103cdbf84 -[YCDownloadSession downloadTaskWithUrl:] + 168 10 YCDownloadSession 0x0000000103cdc060 -[YCDownloadSession startNewTaskWithUrl:fileId:delegate:] + 144 11 YCDownloadSession 0x0000000103cdae2c -[YCDownloadSession startDownloadWithUrl:fileId:delegate:] + 640 12 YCDownloadSession 0x0000000103cdab3c -[YCDownloadSession startDownloadWithUrl:fileId:delegate:priority:] + 164 13 YCDownloadSession 0x0000000103cd70b0 -[YCDownloadManager startDownloadWithItem:priority:] + 504 14 YCDownloadSession 0x0000000103cd7594 -[YCDownloadManager startDownloadWithUrl:fileName:imageUrl:fileId:] + 516 15 YCDownloadSession 0x0000000103cd5c9c +[YCDownloadManager startDownloadWithUrl:fileName:imageUrl:fileId:] + 224 16 BoardCast 0x0000000100d85530 _T09BoardCast17DownloadManagerYCC17startDownLoadTaskyAA9LuboModelC4lubo_tF + 392 17 BoardCast 0x0000000100c8d508 _T09BoardCast27BatchDownloadViewControllerC0cd6BottomE12DidTapButtonySo8UIButtonC6button_tF + 1660 18 BoardCast 0x0000000100c8eb48 _T09BoardCast27BatchDownloadViewControllerCAA0cd6BottomE8DelegateA2aDP0cdgE12DidTapButtonySo8UIButtonC6button_tFTW + 36 19 BoardCast 0x0000000100a1aec0 _T09BoardCast23BatchDownloadBottomViewC21downloadButtonClicked33_E3998E7797A2F12E24816508E55B02E6LLySo8UIButtonC6sender_tF + 348 20 BoardCast 0x0000000100a1af30 _T09BoardCast23BatchDownloadBottomViewC21downloadButtonClicked33_E3998E7797A2F12E24816508E55B02E6LLySo8UIButtonC6sender_tFTo + 72 21 UIKit 0x000000018eaf56b4 <redacted> + 96 22 UIKit 0x000000018eaf5634 <redacted> + 80 23 UIKit 0x000000018eae01dc <redacted> + 440 24 UIKit 0x000000018eaf4f28 <redacted> + 576 25 UIKit 0x000000018f150610 <redacted> + 4280 26 UIKit 0x000000018f14bbc0 <redacted> + 1224 27 CoreFoundation 0x00000001854b1edc <redacted> + 32 28 CoreFoundation 0x00000001854af894 <redacted> + 412 29 CoreFoundation 0x00000001854afe50 <redacted> + 1292 30 CoreFoundation 0x00000001853cfe58 CFRunLoopRunSpecific + 436 31 GraphicsServices 0x000000018727cf84 GSEventRunModal + 100 32 UIKit 0x000000018eb2467c UIApplicationMain + 236 33 BoardCast 0x0000000100eb7950 main + 76 34 libdyld.dylib 0x0000000184eec56c <redacted> + 4 ) 2018-06-29 16:02:47.054093+0800 BoardCast[822:182922] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Task created in a session that has been invalidated' *** First throw call stack: (0x18550a364 0x184750528 0x185b46060 0x185b44f68 0x185b43790 0x10492128c 0x10492ebc8 0x185b436f0 0x185b44ed0 0x103cdbf84 0x103cdc060 0x103cdae2c 0x103cdab3c 0x103cd70b0 0x103cd7594 0x103cd5c9c 0x100d85530 0x100c8d508 0x100c8eb48 0x100a1aec0 0x100a1af30 0x18eaf56b4 0x18eaf5634 0x18eae01dc 0x18eaf4f28 0x18f150610 0x18f14bbc0 0x1854b1edc 0x1854af894 0x1854afe50 0x1853cfe58 0x18727cf84 0x18eb2467c 0x100eb7950 0x184eec56c) libc++abi.dylib: terminating with uncaught exception of type NSException
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
错误或者奔溃信息
出现2个task下载一个任务的情况,控制台会打印2个下载进度,导致下载出错或者失败,UI异常。
这个bug是偶现的,且概率很大,demo里一样会复现。
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
错误或者奔溃信息
在使用NSURLSession进行后台下载的时候,有时候didCompleteWithError方法会出现 Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSErrorFailingURLStringKey=http://********,
手机信息 (please complete the following information):
如何复现
demo也会出现这个问题 在下载过程中直接进入后台 任务dealloc了
错误或者奔溃信息
复制粘贴相关信息或者截图
友情提示
发生问题,或者有疑问时,请仔细参照demo的实现逻辑。为了能够快速解决,请严格按照本模板描述,并且将你的问题在demo的复现过程详细描述出来。
有能力的同学,请自行debug问题的原因,然后进行反馈。或者找到解决办法后发起pull request。
您好,请问我们公司的下载url 是加了防盗链的,一个小时改变一次,我想问一下,我使用YCDownloadSession 的时候应该如何在下载失败的时候判断过期,然后重新生成下载呢,或者有没有更简单一点的办法呢?
recreate Session success
2018-01-05 15:11:40.523857+0800 PoineTech[1567:363719] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
这是我报错原因,我是在加入下载后,立即断网络,可是进去下载页面去启动下载任务,就崩溃到YCDownloadSession.m文件夹-(void)resumeDownloadTask:(YCDownloadTask *)task这个方法处: NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request];
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
添加多个任务到下载列表,设置同时最大下载数为3,然后退到后台,等几分钟进入App,会出现全部任务同时下载的情况并且有可能会出现状态混乱的情况
错误或者奔溃信息
复制粘贴相关信息或者截图
友情提示
发生问题,或者有疑问时,请仔细参照demo的实现逻辑。为了能够快速解决,请严格按照本模板描述,并且将你的问题在demo的复现过程详细描述出来。
有能力的同学,请自行debug问题的原因,然后进行反馈。或者找到解决办法后发起pull request。
手机信息 (please complete the following information):
如何复现
下载功能,断网联网多次出现下载失败之后,重启APP再次进入下载列表界面闪退
错误或者奔溃信息
Attempted to create a task in a session that has been invalidated
Trapped uncaught exception 'NSGenericException', reason: 'Task created in a session that has been invalidated'
友情提示
断点在了 YCDownloadSession.m的404行
NSURLSessionDownloadTask *downloadTask = [self.session downloadTaskWithRequest:request];
再经过 - (NSString *)getPathExtensionWithUrl:(NSString *)url
这个方法的时候,不能取到正确的后缀名
打断点发现 经过NSString *pathExtension = [url pathExtension];
获取到的文件后缀变成了
xlsx&response-content-...(省略)
也就是说 ?
变成了 &
, 虽然我也搞不懂什么问题...
所以修改了一下 - (NSString *)getPathExtensionWithUrl:(NSString *)url
这个方法
+ (NSString *)getPathExtensionWithUrl:(NSString *)url {
NSString *pathExtension = [url pathExtension];
NSArray *pathExtensionArray = [pathExtension componentsSeparatedByString:@"&"];
//过滤url中的参数,取出单独文件名
NSRange range = [pathExtension rangeOfString:@"?"];
if (range.location>0 && range.length == 1) {
pathExtension = [pathExtension substringToIndex:range.location];
} else if (pathExtensionArray.count > 0 ) {
pathExtension = pathExtensionArray.firstObject;
}
return pathExtension;
}
1、有fileid不能暂停、恢复
2、删除没有删掉文件
3、后台下载不能继续下载等待任务
4、多次暂停恢复,直接下载就成功了
5、正在下载闪退后,重新点下载没有断点续下
在StartDownload时,能传递dirPath参数。
场景举例:
需要实现Music下载和Video下载,Music和Video分别保存在指定路径
我下载了很多的视频 zip 文件,不知道什么时候会删除?
毕竟YCDownloadItem中的字段有时候不满足开发者的需求,如何扩展?
删除文件时,文件时删除了,但是本地序列化文件并没有删除
希望添加视频下载的请求头,谢谢
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
点击cell的时候报错
Error: resource not support resume, because reponse headers not have the filed of 'Accept-Ranges' and 'ETag' !
iOS11 bug 因为ios11上的 resumeData 有改动 改了这个就好了
下载的时候来回切换下载,暂停,下载出来的视频无法播放,这个问题在demo中必现。
问一下,可以自定义下载路径么
大神 iOS11.3 多个视频下载,暂停继续按钮多点几次,视频就下载不动了。麻烦大神抽空留意一下这个问题。多谢啦。
手机信息 (please complete the following information):
如何复现
详细的描述如何复现返回的问题?并且参照demo,在demo里同样的操作是否会复现?
错误或者奔溃信息
复制粘贴相关信息或者截图
友情提示
发生问题,或者有疑问时,请仔细参照demo的实现逻辑。为了能够快速解决,请严格按照本模板描述,并且将你的问题在demo的复现过程详细描述出来。
有能力的同学,请自行debug问题的原因,然后进行反馈。或者找到解决办法后发起pull request。
手机信息 (please complete the following information):
如何复现
数据下载后第二天莫名其妙不存在了
发现旧任务继续下载的时候,不走- (void)downloadTask:(YCDownloadTask *)task speed:(NSUInteger)speed speedDesc:(NSString *)speedDesc
这个代理
新建任务可以执行
我测试的时候发现了些问题,表示很不解:
1、APP在下载过程中突然崩溃了,如何去保存completionHandler()?
2、在- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler 中,好像并不需要创建参照? 我发现没创建也是OK的,不知道和创建了有什么区别
3、如果我创建了多个NSURLSession,到后台后是不是要保存多份completionHandler()?
4、我重新进入APP的时候,创建NSURLSession就自动给我继续下载了,导致我在逻辑处理出了问题,怎么让它不自动下载?
手机信息 (please complete the following information):
如何复现
1、运行程序,开始一个下载
2、停止程序运行(stop the running scheme or application),非手动杀死app,所以后台任务继续下载
3、重新启动程序 ,开始相同的下载(此时原来的后台任务还在下载)
4、- (void)URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didWriteData:(int64_t)bytesWritten
totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
在此方法中,有两个downloadTask 根据 YCDownloadTask *task = [self getDownloadTaskWithUrl:[YCDownloadTask getURLFromTask:downloadTask]];找到了同一个YCDownloadTask,task.downloadedSize出现异常,表现下载进度闪烁
这样,如果出现崩溃现象,再次启动就可能出现这个bug!请问怎样处理这种bug?
建议可以按添加的时间来排序
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.