阿里云对象存储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;
    }];
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐