相信许多公司项目有用过七牛云存储来上传图片,但如果碰到更大的视频音频上传,则需要考虑断网,强退等突发情况,从用户体验上来说肯定不希望重新下载,那么在这里就需要用到断点续传,下面来简单的讲一下如何使用七牛的断点续传
首先用QNFileRecorder用来记录断点续传的文件
QNFileRecorder *file = [QNFileRecorder fileRecorderWithFolder:[NSTemporaryDirectory() stringByAppendingString:@"qiniutest"] error:&error];
NSLog(@"recorder error %@", error);
_uploadManager = [[QNUploadManager alloc] initWithRecorder:file];
七牛断点续传是分片的,也可以根据需求修改配置,更改分片大小,chunkSize分片大小,recorder记录文件
QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) {
builder.chunkSize = 256 * 1024;
builder.recorder = file;
}];
_uploadManager = [[QNUploadManager alloc] initWithConfiguration:config]
QNUploadOption传入一些高级选项,mime:mime类型, progressHandler:进度函数,params:自定义服务器回调参数,checkCrc:是否进行crc检查 cancellationSignal:中途取消函数
QNUploadOption *uploadOption = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"progress = %f ",percent);
});
} params:nil checkCrc:NO cancellationSignal:^BOOL{
return NO;
}];
token可以在前端自己生成,而且快速方便,但为了信息安全,这些都应由服务器完成,所以开始上传前先向服务器发送请求获取token,拿到token以后再开始文件上传
NSString *path = @"文件路径";
NSString *key = @"上传到云存储的key";
NSString *token = @"上传需要的token, 由服务器生成";
[_uploadManager putFile:path key:key token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
if (info.isOK) {
NSLog(@"success!");
}
} option:uploadOption];
以上就是七牛断点续传的一个简单流程