详情页标题前

阿里云对象存储OSSiOS断点续传上传-云淘科技

详情页1

在无线网络下,上传比较大的文件持续时间长,可能会遇到因为网络条件差、用户切换网络等原因导致上传中途失败,整个文件需要重新上传。为此,iOS SDK提供了断点续传上传功能。

背景信息

对于移动端而言,如果不是大文件(例如小于5 GB的文件),不建议使用断点续传的方式上传。断点续传上传是通过分片上传实现的,上传单个文件需要进行多次网络请求,效率不高。对于通过断点续传的方式上传大于5 GB的文件时:

  • 断点续传上传前

    通过断点续传上传的方式将文件上传到OSS前,您可以指定断点记录的保存文件夹。断点续传上传仅在本次上传生效。

    • 如果未指定断点记录的保存文件夹,假设某个分片因为网络原因等导致文件上传失败时,将耗用大量的重试时间及流量来重新上传整个大文件。
    • 如果指定了断点记录的保存文件夹,在文件上传失败时,将从断点记录处继续上传未上传完成的部分。
  • 断点续传上传时
    • 断点续传上传仅支持上传本地文件。断点续传上传支持上传回调,使用方法与常见的上传回调类似。具体操作,请参见Callback。
    • 断点续传上传依赖InitMultipartUpload、UploadPart、ListParts、CompleteMultipartUpload、AbortMultipartUpload等接口来实现。如果您需要通过STS鉴权模式来使用断点续传上传,则需要保证您拥有访问以上API接口的权限。
    • 断点续传上传默认已开启每个分片上传时的MD5校验,因此无需在请求中设置Content-Md5头部。
    • 如果同一任务一直得不到续传,可能会在OSS上积累无用碎片。此时,您可以为Bucket设置lifeCycle规则的方式来定时清理碎片,详情请参见生命周期管理。 重要 出于碎片管理的原因,如果在断点续传时取消当前上传任务,默认会同步清理已经上传到服务器的分片。取消上传任务时如果仍希望保留断点上传记录,则需要指定断点记录的保存文件夹并修改deleteUploadIdOnCancelling参数。如果服务端保留记录时间过长,且Bucket已设置lifeCycle规则定时清理了服务端分片,会出现服务端和移动端记录不一致的问题。

示例代码

  • 断点记录在本地持久保存时,调用resumableUpload方法实现断点续传上传的过程如下:
    OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
    resumableUpload.bucketName = OSS_BUCKET_PRIVATE;
    //...
    NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    resumableUpload.recordDirectoryPath = cachesDir;
                        

    说明 使用断点续传上传文件失败时会生成断点记录文件,然后从断点记录处继续上传直到上传完成。上传成功后会自动删除断点记录文件,默认情况下不会在本地持久保存断点记录。

  • 断点续传上传的完整示例代码如下:
    // 获取UploadId上传文件。OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];resumableUpload.bucketName = ;// objectKey等同于objectName,表示断点上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpgresumableUpload.objectKey = ;resumableUpload.partSize = 1024 * 1024;resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);};NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];// 设置断点记录保存路径。resumableUpload.recordDirectoryPath = cachesDir;// 将参数deleteUploadIdOnCancelling设置为NO,表示不删除断点记录文件,上传失败后将从断点记录处继续上传直到文件上传完成。如果不设置此参数,即保留默认值YES,表示删除断点记录文件,下次再上传同一文件时则重新上传。resumableUpload.deleteUploadIdOnCancelling = NO;resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:];OSSTask * resumeTask = [client resumableUpload:resumableUpload];[resumeTask continueWithBlock:^id(OSSTask *task) {    if (task.error) {        NSLog(@"error: %@", task.error);        if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) {            // 此任务无法续传,需获取新的uploadId重新上传。        }    } else {        NSLog(@"Upload file success");    }    return nil;}];// [resumeTask waitUntilFinished];// [resumableUpload cancel];                    

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/158437.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云RDS数据库RDS搭配OSS实现多结构数据存储-云淘科技

    RDS可以和OSS搭配使用,组成多类型数据存储解决方案。 OSS是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。RDS可以和OSS搭配使用,例如当业务应用为论坛时,RDS搭配OSS使用,注册用户的图像、帖子内容的图像等资源可以存储在OSS中,以减少RDS的存储压力。 代码示例 OSS与RDS搭配使用示例,基于Python 3.6编写。 OSS Py…

    阿里云数据库 2023年12月10日
  • 阿里云对象存储OSSC++快速入门-云淘科技

    本节介绍如何快速使用OSS C++ SDK完成常见操作,如创建存储空间(Bucket)、上传文件、下载文件(Object)等。 说明 示例代码中的conf为ClientConfiguration的实例,ClientConfiguration是OssClient的配置类,您可以通过此配置类来配置代理、连接超时、最大连接数等参数。更多信息,请参见C++初始化。 …

    阿里云对象存储 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云大数据开发治理平台 DataWorks空间管理员职责-云淘科技

    本文为您介绍项目管理员的权限和职责。默认创建工作空间的阿里云账号是工作空间所有者,拥有最高权限。 如果工作空间创建完成后,项目所有者不想自行管理,可以指定其子账号为项目管理员角色。 创建工作空间 工作空间创建完成后,工作空间责任人为阿里云主账号(子账号代主账号创建的工作空间,其责任人也为阿里云主账号),创建工作空间的操作请参见创建工作空间。 说明 子账号需要…

  • 阿里云云原生大数据计算服务 MaxCompute使用Azkaban调度MaxCompute-云淘科技

    MaxCompute支持您通过Azkaban实现作业调度,帮助您高效地完成高频数据分析工作。本文以通过MaxCompute客户端执行命令(Command)的方式为例为您介绍如何使用Azkaban调度SQL作业。 背景信息 Azkaban是一套作业调度系统,可以调度Command、Hadoop MapReduce、Hive、Spark、Pig等类型作业,而且支…

    2023年12月10日
  • 阿里云日志服务SLS选择网络-云淘科技

    本文介绍使用Logtail采集日志时,如何选择网络。 网络类型 阿里云内网:阿里云内网为千兆共享网络,日志数据通过阿里云内网传输比公网传输更快速、稳定,内网包括VPC和经典网络。 公网:使用公网传输日志数据,不仅会受到网络带宽的限制,还可能会因网络抖动、延迟、丢包等影响数据采集的速度和稳定性。 全球加速:利用阿里云CDN边缘节点进行日志采集加速,相对公网采集…

    阿里云日志服务SLS 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。