首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导致0B图像上载到GCS的NSURLSession

导致0B图像上载到GCS的NSURLSession
EN

Stack Overflow用户
提问于 2020-04-30 06:56:10
回答 1查看 30关注 0票数 2

我正在使用一个配置为后台会话的NSURLSession将多张图片上传到GCS中的一个存储桶中。在一次测试中,使用了26张图片,每张图片大约10MB。如果不主动充电,测试将使用强大的wifi连接和接近100%的电池。我在应用程序是后台应用程序并通过后台任务到期处理程序通知的情况下创建了这个NSURLSession。

NSURLSession代码:

代码语言:javascript
复制
let config = URLSessionConfiguration.background(withIdentifier: identifier)
config.waitsForConnectivity = true
config.allowsCellularAccess = true
config.isDiscretionary = false

let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
session.sessionDescription = identifier

创建上传请求:

代码语言:javascript
复制
for (signedGCSURLDestination, image) in images {
  let request = URLRequest(url: signedGCSURLDestination, method: .put)
  request.headers.add(name: "Content-Type", value: "image/jpeg")

  let task = session.uploadTask(with: request, fromFile: file)

  task.taskDescription = identifier
  task.resume()
} 

最终,GCS Bucket中的图像都具有0B大小。在转换到后台NSURLSession之前,我们在应用程序前台使用Alamofire,这些图像可以很好地上传到存储桶中。

我开始研究使用后台处理任务,以便在应用程序最小化的同时继续使用Alamofire代码,但这是一个独立于NSURLSession的问题,根本无法工作。

EN

回答 1

Stack Overflow用户

发布于 2020-05-06 05:15:28

一旦设备被锁定,正在上载的文件就没有适当的权限。为我想要上传的每个文件设置completeUntilFirstUserAuthentication属性就解决了这个问题。

代码语言:javascript
复制
FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.completeUntilFirstUserAuthentication],
                                           ofItemAtPath: path)

我想上传在设备锁定之前就已经开始了,而且看起来NSURLSession上传确实是并行进行的。因此,所有文件的上传都可能开始,因此文件占位符存在于GCS中的0B位置,然后由于文件被锁定而永远不会完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61513090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档