IOS(OC)关于多文件上传任务

时间:2024-05-20 11:02:37

背景:
由于公司做的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)

文件信息

IOS(OC)关于多文件上传任务

任务信息

IOS(OC)关于多文件上传任务

1.3、文件处理工具(ZXLFileUtils)、图片处理工具(ZXLPhotosUtils)、视频处理工具(ZXLVideoUtils)、存储管理包括沙盒和数据库(ZXLDocumentUtils和ZXLUploadFmdb)。
1.4、上传结果增、删、改、查。(ZXLUploadFileResultCenter)
1.5、网络环境和状态监控。(ZXLReachability、ZXLNetworkManager)

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.相册原图导出时内存暴涨,过多时会崩溃