LCCFileService

  • 支持断点续传
  • 支持断点下载
  • 大文件分片上传
  • 最大同时上传,下载队列可控
  • 上传,下载,进度多种方式监听
  • 可以自定义下下载,上传器(目前是封装的亚马逊AWSS3
  • 秒传,秒下载(通过MD5和FileKey,判定文件是否已经上传或者下载,如果是,直接进行copy 操作)
pod 'LCCFileService'

github地址

上传

第一步:添加下载器_netService = [[LCFileNetService alloc] init];[_netService addHander:[LCS3Hander default]];第二步:添加任务
LCFileNetTask *task = [[LCFileNetTask alloc] init];task.taskId = [NSUUID UUID].UUIDString;task.fileKey = key?:[@"10_29/" stringByAppendingString:[NSUUID UUID].UUIDString];task.type = LCFileNetTaskTypeUpload;task.filePath = filePath;task.fileName = @"task_fileName";task.statusCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:statusCallback:%@",task);};task.progressCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:progressCallback:%@",task);};task.finishCallback = ^(LCFileNetTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"test:finishCallback:%@ error:%@",task,error);XCTAssertNil(error);[ret fulfill];};[self.netService lc_startTask:task queue:nil];

下载

第一步:添加下载器_netService = [[LCFileNetService alloc] init];[_netService addHander:[LCS3Hander default]];第二步:添加任
LCFileNetTask *task = [[LCFileNetTask alloc] init];task.taskId = [NSUUID UUID].UUIDString;task.fileKey = key;task.type = LCFileNetTaskTypeDownload;task.filePath = [[rootPath stringByAppendingPathComponent:task.taskId] stringByAppendingPathExtension:@"file"];task.fileName = @"task_fileName";task.statusCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:statusCallback:%@",task);};task.progressCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:progressCallback:%@",task);};task.fileKey = _smallFileKeys.firstObject;task.finishCallback = ^(LCFileNetTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"test:finishCallback:%@ error:%@",task,error);XCTAssertNil(error);[ret fulfill];};[self.netService lc_startTask:task queue:nil];

灵活的监听方式

Way1 :使用block

LCFileNetTask *task = [[LCFileNetTask alloc] init];task.statusCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:statusCallback:%@",task);};task.progressCallback = ^(LCFileNetTask * _Nonnull task) {NSLog(@"test:progressCallback:%@",task);};task.fileKey = _smallFileKeys.firstObject;task.finishCallback = ^(LCFileNetTask * _Nonnull task, NSError * _Nonnull error) {NSLog(@"test:finishCallback:%@ error:%@",task,error);XCTAssertNil(error);[ret fulfill];};

Way2: 使用代理

#import <LCFileNetService.h>
#import "LCFileNetProtocol.h"
@interface LCCViewController ()<LCFileNetProtocol>
@property (nonatomic, strong) LCFileNetService *fileService;
@end@implementation LCCViewController- (void)viewDidLoad
{[super viewDidLoad];_fileService = [LCFileNetService default];[_fileService addObserver:self];
}
- (void)lc_fileNetProgress:(LCFileNetTask *)task{NSLog(@"%s",__func__);
}
- (void)lc_fileNetStatusChange:(LCFileNetTask *)task{NSLog(@"%s",__func__);
}
- (void)lc_fileNetFinshed:(LCFileNetTask *)task error:(NSError *)error{NSLog(@"%s",__func__);
}

Way3 使用ProtocolFinder 监听

第一步: 注册监听
[[ProtocolFinder defaultFinder] registerObj:self forProtocols:@[@protocol(LCFileNetProtocol)]];
第二步:监听(同代理)
- (void)lc_fileNetProgress:(LCFileNetTask *)task{NSLog(@"%s",__func__);
}
- (void)lc_fileNetStatusChange:(LCFileNetTask *)task{NSLog(@"%s",__func__);
}
- (void)lc_fileNetFinshed:(LCFileNetTask *)task error:(NSError *)error{NSLog(@"%s",__func__);
}

tips:

way1 和way2 只能在一处获得回调结果,
way3,可以在多处同时获得回调结果,多用于需要在不同地方都要现实文件上传下载进度或状态的场景

自定义上传,下载器

目前LCFileNetService 只封装了亚马逊AWSS3 的库,如果需要添加其他的方式,只需要实现LCFileNetHander 协议,然后调用- (void)addHander:(nonnull id<LCFileNetHander>)hander;既可

API

/// 添加操作器
- (void)addHander:(nonnull id<LCFileNetHander>)hander;/// 添加观察器
- (void)addObserver:(nonnull id<LCFileNetProtocol>)observer;/// 开始一个任务
- (void)lc_startTask:(LCFileNetTask *)taskqueue:(nullable NSOperationQueue *)queue;/// 恢复任务
- (void)lc_resumTask:(NSString *)taskIdqueue:(nullable NSOperationQueue *)queue;/// 取消任务
- (void)lc_cancelTask:(NSString *)taskId;/// 暂停任务
- (void)lc_pauseTask:(NSString *)taskId ;/// 暂停所有任务
- (void)lc_pauseAllTask;/// 更新本地数据库的文件保存路径
- (void)lc_updatetask:(NSString *)keyfilePath:(NSString *)filePath;///获取一个任务的信息,
- (LCFileNetTask *)lc_getTask:(NSString *)taskId;

AWSS3文件断点下载,分片上传,断点续传相关推荐

  1. js文件分片上传,断点续传

    前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...

  2. minio实现大文件分片上传+断点续传+预览

    minio实现大文件分片上传+断点续传+预览 只提供后端java代码 思路: 前端分片 校验文件md5是否已经存在 --不存在创建临时桶存分片 校验分块是否已经上传 分块上传 合并分块 校验合成后md ...

  3. vue实现大文件分片上传断点续传并展示上传进度条

    最近有一个上传视频到服务器的功能,然后发现视频太大了,比如1个G的视频文件基本都是上传失败的,我之前都是上传阿里云的,所以面对大文件上传服务器就做了分片上传和断点续传. 首先解释什么是分片上传:比如一 ...

  4. 网页文件分片上传,断点续传

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  5. Web文件分片上传,断点续传

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  6. 前端实现大文件上传分片上传断点续传

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  7. 分片上传,断点续传,还有秒传

    分片上传 为什么需要分片上传 如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成. 分片上传的核心思想 利用H ...

  8. java 图片分段上传_java文件分片上传,断点续传

    文件夹数据库处理逻辑 publicclassDbFolder { JSONObject root; publicDbFolder() { this.root =newJSONObject(); thi ...

  9. Vue+ElementUI实现文件的下载与上传

    当需要批量导入的时候,一般会提供下载示例文件的功能.实现下载功能直接使用<a>标签即可. <a class='download' :href='downloadhttp' downl ...

  10. 大文件上传最全方案:秒传、断点续传、分片上传

    前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...

最新文章

  1. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出
  2. php 数组 双向链表,一个字节数组双向链表类,主要针对串口通讯而开发的
  3. android 相机 全功能,一加7系首个Android 11公测代码暗示了相机应用的诸多功能更新...
  4. Akka并发编程——第八节:Actor模型(七)
  5. activiti页面展示流程图乱码_activiti 5.17 流程图中文乱码问题
  6. 有孚网络北京云数据中心荣获绿色建筑国际LEED金牌认证和国家CQC A级机房认证...
  7. Linux+Apache+Mysql+PHP典型配置
  8. hdu5481 Desiderium
  9. java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager
  10. 036 关于网站的UV分析
  11. 嵌入式基础面八股文——孤儿进程、僵尸进程、守护进程的概念(3)
  12. 笔记︱精准营销解决方式以及营销组合评估
  13. chpater 2 : InnoDB存储引擎
  14. Wunderlist1.22(Window版)无法启动的解决方法
  15. Flask 物联网局部应用情景
  16. 计算机语言中print是什么意思,PASCAL 语言中print是什么意思?
  17. 一步步教你搭建Android开发环境(有图有真相)--“自吹自擂:史上最详细、最啰嗦、最新的搭建教程”
  18. 营销文案的“瑞士军刀”:阿里妈妈智能文案多模态、多场景探索
  19. Linux相关的压缩解压缩命令
  20. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

热门文章

  1. windows查看局域网内所有已使用的IP
  2. android 修改wifi信道,学会修改WiFi信道,让你的WIFI提速
  3. 保存 Hexo 博客源码到 GitHub
  4. 基于elementui的年月日周时间控件
  5. matlab imagesc 平滑,在matlab中,如何使用imagesc在2D热图中“平滑”像素
  6. BCDboot 命令行选项
  7. NJU机器学习导论课程笔记之写作缘由
  8. SATI 国产文献题录信息统计分析工具:简介
  9. python离线安装环境 解决 ERROR: Could not find a version that satisfies the requirement xxx 以及winError[10061]
  10. wifi射频设计指南