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

2018-04-18  本文已影响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回调.

上一篇下一篇

猜你喜欢

热点阅读