背景: 由于公司做的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)
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、上传性能考虑。(阿里云上传库里面解决了此问题、如果用的是七牛的库可以参考压缩新能考虑的做上传处理)
创建文件模型 1.1 创建相册文件模型 ZXLFileInfoModel *model = [[ZXLFileInfoModel alloc] initWithAsset:asset];
1.2 创建拍摄的图片
如果图片不大或者编辑过的图片
ZXLFileInfoModel *model = [[ZXLFileInfoModel alloc] initWithImage:image];
拍摄的原图(内部对图片做了处理)
ZXLFileInfoModel *model = [[ZXLFileInfoModel alloc] initWithUIImagePickerControllerImage:image];
1.3创建拍摄的视频或者路径文件
ZXLFileInfoModel *model = [[ZXLFileInfoModel alloc] initWithFileURL:filePath];
文件上传 2.1 等待上传结果 [JLBAsyncUploadTaskManager startUploadForIdentifier:self.uploadIdentifier complete:^(ZXLTaskInfoModel *taskInfo) { if (taskInfo) { [self submitFinishWithTaskInfo:taskInfo]; } }]; 2.2 统一处理上传结果
[[ZXLUploadTaskManager manager] startUploadWithUnifiedResponeseForIdentifier:self.uploadIdentifier];
//处理中心在Dome ZXLUploadUnifiedResponese+Exension 文件中 -(void)extensionUnifiedResponese:(ZXLTaskInfoModel *)taskInfo 函数中
如果有什么疑问留言 或者邮件 244061043@qq.com