美文网首页
iOS 使用AliyunOSS进行后台上传文件

iOS 使用AliyunOSS进行后台上传文件

作者: 简书弧线 | 来源:发表于2018-04-18 16:15 被阅读145次

    今天在使用AliyunOSS测试上传文件时, 发现了一个现象:

    1. 当上传正在进行, 此时将APP切换到后台, 上传会被暂停.
    2. 等待几秒后再切回到APP时, 上传才会继续进行.
    3. 如果切出去的时间比较长, 返回到APP时, 之前的上传进度会丢失, 上传任务会从0%重新开始.
    http://cocoadocs.org/docsets/AliyunOSSiOS/2.1.0/index.html
    https://help.aliyun.com/document_detail/32060.html
    

    查阅了一下阿里云的SDK文档后, 发现了问题所在.

    如果需要支持后台传输,将conf.enableBackgroundTransmitService赋值为YES后,
    还需要设置每个OSSClient全局唯一的backgroundSessionIdentifier,
    否则无法构造多个OSSClient实例,会遇到
    A background URLSession with identifier com.aliyun.oss.backgroundsession already exists!异常。
    

    在阿里云的SDK中可以看到enableBackgroundTransmitService 和 backgroundSessionIdentifier 这两个参数的说明.


    参数.png
    注意, 这两个参数只有在上传文件的时候才有效.
    

    因为阿里云的SDK在上传时, 有两种方式:

    1. 从内存中的NSData上传使用: uploadingData
    2. 从文件上传时使用: uploadingFileURL

    在初始化OSSClient时, 加上了OSSClientConfiguration, 就可以做到后台上传了.

    // 初始化OSSClientConfiguration
    OSSClientConfiguration *config = [OSSClientConfiguration new];
    // 设置后台上传
    config.enableBackgroundTransmitService = YES;
    // 设置session唯一标识
    config.backgroundSesseionIdentifier = key;
    // 初始化OSSClient
    OSSClient *client = [[OSSClient alloc] initWithEndpoint:AliYunHost credentialProvider:credential clientConfiguration:config];
    

    每次在创建OSSClientConfiguration时, 必须保证backgroundSesseionIdentifier是唯一的, 不能存在2个相同的backgroundSesseionIdentifier.否则无法上传.

    按照要求添加了OSSClientConfiguration后, 上传任务会一直进行, 即使APP切换到后台, 也不会暂停.直到上传完毕执行completion回调.

    相关文章

      网友评论

          本文标题:iOS 使用AliyunOSS进行后台上传文件

          本文链接:https://www.haomeiwen.com/subject/xsgvkftx.html