1

问题:

我正在构建一个照片组织/备份 iOS 应用程序,它需要将用户设备库中的照片上传到我们的服务器。

用户创建他的个人资料并登录到应用程序,并扫描他的图库中的图像。上传以多部分表单数据请求的形式分批进行,大约 10 个文件。在每批上传后,我需要对我们的服务器进行 api 调用以提交刚刚结束的上传。服务器还可以在处理之前提交的批次后进行自己的提交,例如根据图像内容创建相册等。如果发生这种情况,客户端在提交上传时会从服务器获得不同步的响应,并且它必须在提交上传之前首先获取服务器提交。随后计划上传下一批 10 张图像。

我为此目的使用 NSURLSessionUploadTask。当应用程序处于挂起状态时上传完成时,应用程序会被唤醒,我可能需要执行以下 1,2,3 或仅 2,3

  1. 获取服务器为之前提交的上传完成的提交
  2. 提交刚刚完成的上传
  3. 安排下一批 10 张图片上传

==================================================== ==

这对我们不起作用。上传完成后,应用程序在唤醒时没有足够的时间执行 1,2,3 或 2,3。请求后台执行时间不能超过 180 秒,因为 Apple 限制了它。

我不能在不提交它们的情况下继续上传批次,因为服务器在开始覆盖图像之前有 100 个图像的缓冲区。如果我继续上传而不提交,服务器开始覆盖以前上传的图像,从而丢失数据。

我还观察到,即使我尝试在不执行任何提交的情况下上传多批图像,上传程序守护进程 nsurlsessiond 不会立即拾取上传程序守护进程 nsurlsessiond 后立即在后台调度为 NSURLSessionUploadTask 的第一个任务。有时它会在 5 分钟后恢复,有时会在 10 分钟后恢复。在整个过程中,我的 Wifi 连接良好,并且我的 NSURLSession 已相应配置。

对于上面我在 StackOverflow 上读到的内容,如果 nsurlsessiond 队列为空,它不会立即选择下一个任务。所以只是为了试验,我提交了 3-4 批上传并将应用程序置于后台,但行为是相同的。第二次上传直到 5-10 分钟才会被接收,依此类推,第三次和第四次。

==================================================== ==

我已经看到 Google 照片在不使用定位服务的情况下连续上传。Dropbox 也这样做。他们的提交架构可能与我们的不同。但是目前,即使忽略了我必须进行额外 api 调用的整个提交方面,我什至无法连续上传 3-4 批图像。

您能否指导我们分析这种情况,以便我为我们的应用程序提供后台上传解决方案。

再次感谢。

4

0 回答 0