AWSS3文件断点下载,分片上传,断点续传
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文件断点下载,分片上传,断点续传相关推荐
- js文件分片上传,断点续传
前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...
- minio实现大文件分片上传+断点续传+预览
minio实现大文件分片上传+断点续传+预览 只提供后端java代码 思路: 前端分片 校验文件md5是否已经存在 --不存在创建临时桶存分片 校验分块是否已经上传 分块上传 合并分块 校验合成后md ...
- vue实现大文件分片上传断点续传并展示上传进度条
最近有一个上传视频到服务器的功能,然后发现视频太大了,比如1个G的视频文件基本都是上传失败的,我之前都是上传阿里云的,所以面对大文件上传服务器就做了分片上传和断点续传. 首先解释什么是分片上传:比如一 ...
- 网页文件分片上传,断点续传
总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...
- Web文件分片上传,断点续传
总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...
- 前端实现大文件上传分片上传断点续传
总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...
- 分片上传,断点续传,还有秒传
分片上传 为什么需要分片上传 如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成. 分片上传的核心思想 利用H ...
- java 图片分段上传_java文件分片上传,断点续传
文件夹数据库处理逻辑 publicclassDbFolder { JSONObject root; publicDbFolder() { this.root =newJSONObject(); thi ...
- Vue+ElementUI实现文件的下载与上传
当需要批量导入的时候,一般会提供下载示例文件的功能.实现下载功能直接使用<a>标签即可. <a class='download' :href='downloadhttp' downl ...
- 大文件上传最全方案:秒传、断点续传、分片上传
前言 文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上 ...
最新文章
- 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出
- php 数组 双向链表,一个字节数组双向链表类,主要针对串口通讯而开发的
- android 相机 全功能,一加7系首个Android 11公测代码暗示了相机应用的诸多功能更新...
- Akka并发编程——第八节:Actor模型(七)
- activiti页面展示流程图乱码_activiti 5.17 流程图中文乱码问题
- 有孚网络北京云数据中心荣获绿色建筑国际LEED金牌认证和国家CQC A级机房认证...
- Linux+Apache+Mysql+PHP典型配置
- hdu5481 Desiderium
- java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager
- 036 关于网站的UV分析
- 嵌入式基础面八股文——孤儿进程、僵尸进程、守护进程的概念(3)
- 笔记︱精准营销解决方式以及营销组合评估
- chpater 2 : InnoDB存储引擎
- Wunderlist1.22(Window版)无法启动的解决方法
- Flask 物联网局部应用情景
- 计算机语言中print是什么意思,PASCAL 语言中print是什么意思?
- 一步步教你搭建Android开发环境(有图有真相)--“自吹自擂:史上最详细、最啰嗦、最新的搭建教程”
- 营销文案的“瑞士军刀”:阿里妈妈智能文案多模态、多场景探索
- Linux相关的压缩解压缩命令
- P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]
热门文章
- windows查看局域网内所有已使用的IP
- android 修改wifi信道,学会修改WiFi信道,让你的WIFI提速
- 保存 Hexo 博客源码到 GitHub
- 基于elementui的年月日周时间控件
- matlab imagesc 平滑,在matlab中,如何使用imagesc在2D热图中“平滑”像素
- BCDboot 命令行选项
- NJU机器学习导论课程笔记之写作缘由
- SATI 国产文献题录信息统计分析工具:简介
- python离线安装环境 解决 ERROR: Could not find a version that satisfies the requirement xxx 以及winError[10061]
- wifi射频设计指南