syfh / fkdownloader Goto Github PK
View Code? Open in Web Editor NEW👍🏻📥Maybe the best file downloader.
License: MIT License
👍🏻📥Maybe the best file downloader.
License: MIT License
大神,请问怎么比较简单的在这个框架的基础上实现增加M3U8视频文件下载
怎么实现同时下载多个视频,但是这些视频的存储目录为不同的文件夹
正打算自己写一个,发现你的这个框架,可以节省不少工作
想问一下你这边如对多种任务下载队列进行管理呢,比如我一个app里面,既有电影下载,又有音乐下载,这是两种不同的任务,都需要后台下载
https://stackoverflow.com/questions/20251432/cant-move-file-after-background-download-no-such-file
这个地址用 NSData 替换 fileManager
的 copyItemAtPath` 可以解决
有个需求该项目能否满足,或者提供下思路,就是下载顺序问题,按加入顺序进行依次下载,还有个开始时间和结束时间能否满足
设备型号:iphone 7p
系统版本:iOS 12.1.4
操作步骤:运行demo 拔掉电源
期望结果:正常下载
运行结果:不下载
您的代码:无
描述: 连接电源后就可以直接下载 拔掉电源后下载就会停止
这个bug偶现,作者能猜想一下原因吗
demo 中下载列表里面侧滑删除一个已下载完成的cell没有删除本地缓存的文件。
设备型号: iPhone 6S
系统版本: 10.3.3
操作步骤: 先运行demo到手机, 然后手机设置低电量模式并拔下数据线,打开demo
期望结果: 能正常下载
运行结果: 点击“开始”按钮已变为“暂停”(说明为正在下载中),但无进度条显示, 取消低电量模式或者数据线连接电脑就能正常下载
您的代码: demo原代码
当我在下载中强制退出app,不是后台。然后再重启 app 的时候,就会报这个错误
Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={NSErrorFailingURLStringKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, NSErrorFailingURLKey=http://61.184.206.158/9bcd3aa274db88c3bf9213c80fba82fd.ts?ts_name=1&k=36f50601c365b2ff9e341757a80f8d8a-93fb-1544440233&vvid=d1db0cad-271f-af54-6663-1508bcde8dee&type=mpptv.wp&bppcataid=9&segment=1f62a124_1f624b44_1544425833, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>",
"LocalDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>"
), _NSURLErrorFailingURLSessionTaskErrorKey=BackgroundDownloadTask <D31974BC-F824-440B-AE39-D3EFFFA274D8>.<1301>}
再之后,无论怎么操作都不会下载成功了。
设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:
报错信息:
设备型号:ipone 8s plus
系统版本: 12.1.2
操作步骤: 下载文件downloader.restore 获取size = 0
期望结果: 不为零
运行结果:
您的代码: kf demo
demo 中点击全部暂停后,task 仍然会继续执行
使用最新版本
[[FKDownloadManager manager] addTasksWithArray:array tag:strtag]; // 全部添加
[[FKDownloadManager manager] startWithTag:strtag]; //按标签启动
最后只下载了五六个,看taskhub里其它任务均为等待状态 ,但看fklog输出为
FKDownloadManager.m:258 开始执行 FKTask: <FKTask: 0x6000029a57a0>.<711>.<TaskStatusNone>.<https://ese2a2b9c8d9cb-pub.pubssl.ss.net/22989/42fcc57b3ec347e6b20ad023c28f967e/lgjOnsNjII53qVF8-sd_seg_62_ehls_a2f3bc?schoolId=22989&fileGlobalId=42fcc57b3ec347e6b20ad023c28f967e&userId=1&userName=%E9%A2%86%E5%B8%A6%E5%90%9B1>.<0.0000>
FKDownloadManager.m:265 当前执行数量 3 已超过 3
没有执行的任务均输出了上面的日志,但是后续并没有执行,检查整个日志都 没有执行过startNextIdleTask函数
谢谢
设备型号:iphone 8
FKDownloadExecutor文件中 28行与83行两个不一致,这个是为什么啊
FKTask *downloadTask = [[FKDownloadManager manager] acquire:url.absoluteString.decodeEscapedString];
FKTask *task = [[FKDownloadManager manager] acquire:url.absoluteString];
sorry,又来提 bug 了。
直接通过 task.tags 取值为空
NSMutableSet *subtract = [NSMutableSet setWithSet:self.tags];
[subtract subtractSet:tags];
if (subtract.count > 0) {
[self.tags unionSet:tags];
}
断点查看,这里好像没有添加进去。
当我添加一组任务,全部下载完成后我想清除这些任务,因为自己另外做了汇总的存储,同时也避免 task 中的任务过多。我在 didFinishTask
的回调中判断这组任务的数量是否全部下载完成,然后调用:
[[[FKDownloadManager manager] acquireWithTag:targetId] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
[[FKDownloadManager manager] remove:obj.url];
}];
并开始下一组任务,这样操作好像是不安全的,我已遇到过两种错误(一定概率下):
还有一种:
[FKTask retain]: message sent to deallocated instance 0x2812dcd20
NSString+FKDownload 里面的 AFPercentEscapedStringFromString 方法
设备型号:iPhone 7
系统版本: 12+
操作步骤:使用http://d30.xcenable.com/storage/attachment/2019/8/14/4f9516f08b134a0c81a7c68247580a0f.mp4 下载视频,
期望结果:实现断点下载
运行结果:不能实现断点下载,暂停之后继续点击下载,会从头开始下载
您的代码:
报错信息:我测试了下载发现我们公司的服务器下的资源都是这种情况,这两个方法 cancelByProducingResumeData 和 didCompleteWithError 里面的取的resumedata都为nil,不知道是什么原因
当访问一个地址,比如: www.xx.com/1.mp4
,但是它的真实地址可能是: www.yy.com/1.mp4
。由于是通过 url.identifier 来确定任务的,在 urlsession 的回调的时候获取task.currentRequest.URL.absoluteString
会得到后面的地址从而找不到该任务从而下载失败。
设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:
- (void)reday {
FKLog(@"开始准备: %@", self)
if (self.isFinish) {
self.progress.totalUnitCount = 1;
[self sendFinishInfo];
return;
}
...
当 task 的文件已经完成时,建议将文件的大小作为 progress 的 totalUnitCount
有的一组下载链接是通过参数来区别文件的,如果忽略参数设置 identifier 会导致这类任务无法添加。建议对该选项提供 configure 和 task 的设置。
[[FKDownloadManager manager] addTasksWithArray:tasks.copy];
// 第一次会取不到值
[[FKDownloadManager manager].taskHub.allTask orderEach:^(FKTask *task, NSUInteger idx) {
[[FKDownloadManager manager] start:task.url];
}];
当添加一组任务后立即调用开始任务,taskHub 中会返回一个空数组。
我这边测试发现一些请求地址先编码后会请求错误,去掉编码后可以正常请求成功。不知道这个操作是否必须?
设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:
报错信息:
切换一组任务的暂停/恢复任务几次后,其中的单个任务下载完成后执行下一个任务时会没有任何响应,不会响应下载的回调,也不会出错。操作一次就能下载成功一个任务,但下一个不会自动开始。
暂停
[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
[[FKDownloadManager manager] suspend:obj.url];
}];
恢复
[[[FKDownloadManager manager] acquireWithTag:xx] forEach:^(FKTask * _Nonnull obj, NSUInteger idx) {
[[FKDownloadManager manager] resume:obj.url];
}];
设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:
报错信息:
[[FKDownloadManager manager] addTasksWithArray:tasks tag:""];
[FKDownloadManager manager].addedBlock = ^{
//
};
当执行较少的任务时,这样使用会存在 block 还未赋值的问题。虽然将赋值放在前面能解决,建议可以添加对一组任务操作的状态同步。
另外非常感谢,目前使用这个库已经满足我 MP4 和 M3U8 的下载需求了。
如果不指定 task 的 filename,使用 url.lastPathComponent 作为文件名时,可能存在 url 不同,但是文件名相同的问题。
设备型号:iPhone
系统版本:13。5.1
操作步骤:demo 运行 资源列表 添加下载任务 添加了一屏幕多点 就是使得列表可以滑动 不管是在下载中还是下载完后 下载管理中上下多滑几次就会crash 必现
期望结果:由于项目中用到了大侠的库,求解决,万分感谢
运行结果:
您的代码:
报错信息:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSConcreteMapTable: 0x102613a10> was mutated while being enumerated.'
设备型号: iPhone
系统版本: iOS 11+
操作步骤: 文件下载后 保存到 "我的iPhone" 里的时候 得到的文件名不是原始文件名
期望结果:
运行结果:
您的代码:
报错信息:
设备型号:
系统版本:
操作步骤:
期望结果:
运行结果:
您的代码:
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.