背景:
由于公司做的App 对于文件上传数量控制在100,而且一部分功能不是同步等待上传结果的。
视频要压缩为.mp4 ,时间不能为5分钟。(相信很多人看到这个背景就头大了,100个文件什么鬼)
还是自己慢慢分析实现吧。
功能分析
1.等待多文件上传任务成功进行下一步操作。(等待上传成功再操作其他的功能)
2.不等待多文件上传任务成功继续操作其他的功能。(不等上传结果操作其他功能)
3.与非多文件任务上传同时存在。(这个任务实现要与单个文件上传方式同在)
4.断网后所有上传任务中断,恢复网络后所有任务继续。
5.App突然被干掉重启继续中断的上传任务。
6.上传成功过的文件不重复上传,减少流量损耗、提高上传速度、提高上传成功率。
7.不同任务中有相同文件正在上传等待上传结果,同步上传进度、文件信息。(如果有需要视频压缩同理)
8.有视频压缩的控制同时存在的压缩数量。
9.文件上传控制同时存在的上传数量。(目前我用的阿里云上传库里面解决了此问题)
10.控制内存、CPU等性能。
暂时就分析在这里吧
实现思路
1.准备工作
1.1、文件上传实现,(ZXLAliOSSManager)
公司目前服务器都在阿里云上所以上传也用的阿里云,我只是简单的实现了一个上传封装。
1.2、文件信息model 、任务信息model。(ZXLFileInfoModel、ZXLTaskInfoModel)
文件信息
任务信息
2.实现过程
2.1、上传管理中心。(ZXLUploadFileManager)
处理任务文件上传和非任务文件上传。
2.2、上传任务管理中心。(ZXLUploadTaskManager)
3.线程安全考虑,针对数组(ZXLSyncMutableArray)、字典(ZXLSyncMutableDictionary)等做线程安全。
4.性能考虑。
4.1、压缩性能考虑。(ZXLCompressManager、ZXLCompressOperation)
4.2、上传新能考虑。(阿里云上传库里面解决了此问题、如果用的是七牛的库可以参考压缩新能考虑的做上传处理)
还是直接上代码吧 https://github.com/ZXLBoaConstrictor/ZXLUpload,留下你们的星,持续更新。
实现中遇到的问题
1.ios 每次启动的时候沙盒 和相册地址都会变化,所以使用本地存储的文件不要存绝对路径,最大的问题就是上传文件和使用缓存。
2.在8.0 的系统的时候拍视频存储方式 和 11的系统不一样。
8.0系统 :/private/var/mobile/Containers/Data/Application/66045C79-D0B2-4B84-A6CA-5788D838DC72/tmp/capture-T0x174261fc0.tmp.OwEvN8/capturedvideo.MOV
11系统:/private/var/mobile/Containers/Data/Application/66045C79-D0B2-4B84-A6CA-5788D838DC72/tmp/xxx.MOV
3.PHAssetResource 9.0 系统以后才有的库。(使用相册数据被坑)
5.相册原图导出时内存暴涨,过多时会崩溃