这里我将大年夜文件切成最小1M的小文件来上传。这边应用到一个Model,该数据模型重要存放上传列表中所须要的一些根本数据。因为我们每次上传完一片,须要更新UI。因为这边须要支撑断点续传,是以须要记录文件的进度值,已上传的片数我们须要保存下来。保存上传文件路径和文件进度可以应用数据库或则plist文件等方法,这边须要保存的数据不是很多,所以我直接保存在了偏好设置中。每片文件上传成功,设置该模型已上传片数,并且更新本地文件进度值。
我们可以大年夜致看下所用到的Model
YJTUploadManager.h
- @implementation YJTDocUploadModel
- // 上传完毕后更新模型相干数据
- - (void)setUploadedCount:(NSInteger)uploadedCount {
- _uploadedCount = uploadedCount;
- self.uploadPercent = (CGFloat)uploadedCount / self.totalCount;
- self.progressLableText = [NSString stringWithFormat:@"%.2fMB/%.2fMB",self.totalSize * self.uploadPercent /1024.0/1024.0,self.totalSize/1024.0/1024.0];
- if (self.progressBlock) {
- self.progressBlock(self.uploadPercent,self.progressLableText);
- }
- // 刷新本地缓存
- [[YJTUploadManager shareUploadManager] refreshCaches];
- }
- @end
3.上传
关于上传进度,可以粗略计算。也可应用NSURLSessionDataTask的countOfBytesSent及时`控。其实NSURLSessionTask在iOS11今后还供给了progress属性。附上核心代码供给参考。
初次调用上传接口
- #pragma mark- first upload 断点
- // 上传初始化
- - (void)uploadData:(NSData *)data withModel:(YJTDocUploadModel *)model {
- // 寂?娆数
- NSInteger count = data.length / (kSuperUploadBlockSize);
- NSInteger blockCount = data.length % (kSuperUploadBlockSize) == 0 ? count : count + 1;
- // 给model赋值
- model.filePath = [self writeToCacheVideo:data appendNameString:model.lastPathComponent];
- model.totalCount = blockCount;
- model.totalSize = data.length;
- model.uploadedCount = 0;
- model.isRunning = YES;
- // 上传所需参数
- NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
- parameters[@"sequenceNo"] = @0;
- parameters[@"blockSize"] = @(kSuperUploadBlockSize);
- parameters[@"totFileSize"] = @(data.length);
推荐阅读
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?背景介绍本项目重要解决 check 和 opinion2 张汗青数据表(汗青数据是指当营业产生过程中的完全中心流程和结不雅数据)的在>>>详细阅读
本文标题:iOS模仿断点机制上传文件实现方法
地址:http://www.17bianji.com/lsqh/39995.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示