阿里云对象存储OSS-断点续传
什么是断点续传
在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,SDK提供了断点续传上传功能。
注意实现
1、断点续传上传暂时只支持上传本地文件。
2、对于移动端来说,如果不是比较大的文件,不建议使用这种方式上传,因为断点续传上传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。
代码实现
什么都不用做了,OSS SDK已经帮我们实现了断点续传功能,只要掉接口就行了。😌
OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
resumableUpload.bucketName = [VHOSSManager sharedManager].federationToken.bucketName;
resumableUpload.objectKey = [NSString stringWithFormat:@"%@/%@%@",[VHOSSManager sharedManager].federationToken.bucketCatalog,uplodFile.fileMD5,uplodFile.MIMEType];
resumableUpload.partSize = 1024 * 1024;
resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
uplodFile.totalBytes = totalBytesExpectedToSend;
if (progressCallback) {
progressCallback(uplodFile,totalByteSent,totalBytesExpectedToSend);
}
};
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
//设置断点记录文件
resumableUpload.recordDirectoryPath = cachesDir;
//设置NO,取消时,不删除断点记录文件,如果不进行设置,默认YES,是会删除断点记录文件,下次再进行上传时会重新上传。
resumableUpload.deleteUploadIdOnCancelling = NO;
resumableUpload.uploadingFileURL = [NSURL URLWithString:filePath];
OSSTask * resumeTask = [[VHOSSManager sharedManager].client resumableUpload:resumableUpload];
[resumeTask continueWithBlock:^id(OSSTask *task) {
dispatch_async(dispatch_get_main_queue(), ^{
if (task.error) {
OSSLogDebug(@"error: %@", task.error);
if (task.error.code == OSSClientErrorCodeCannotResumeUpload) {
// 该任务无法续传,需要获取新的uploadId重新上传
if (failedCallback) {
failedCallback(uplodFile,task.error);
}
} else {
}
}
else {
if (successCallback) {
successCallback(uplodFile);
}
}
});
return nil;
}];