iOS 照片从分享扩展上传,上传完成后回复

标签 ios upload share nsurlsession

我有一个共享扩展,我正在将照片上传到我的服务器。我在设备上处理图像并将其转换为 .jpg。我将它保存到临时目录,因为 NSURLSession 只能从后台文件上传,而不是 NSData。请求被发送出去,共享扩展调用 completeRequestReturningItems:completionHandler:nil 终止扩展。

上传成功,这很好,但是上传完成后我需要删除临时文件。我对如何响应上传完成感到有点困惑。我见过实现 NSURLSessionDelegate 的示例,但我不知道在哪里实现。如果我在我的共享扩展代码中这样做,我认为它不会做任何事情,因为共享扩展被终止,然后上传发生在后台。

关于我需要在哪里实现此代码或代码示例的任何帮助都会很棒。

最佳答案

您的 NSURLSession 必须有一个委托(delegate) - 最好不是 SLComposeServiceViewController 的子类-,该对象应该负责从共享容器文件夹中删除这些文件 - 参见 containerURLForSecurityApplicationGroupIdentifier: .

您的委托(delegate)必须至少实现 -URLSession:task:didCompleteWithError:此时它完成了 session 中的一项任务。该任务与一个文件相关联,因此您必须跟踪与哪个文件相关联,以便您将其删除。

session 的委托(delegate)将一直存在,直到任务完成,除非 iOS 出于某种原因终止它,否则您应该实现 -application:handleEventsForBackgroundURLSession:completionHandler:在您的应用委托(delegate) , 重新创建 session 以继续上传任务并使用委托(delegate)来处理 session 的进度和完成。

测试可能非常棘手,因此在测试时,请尝试使用大文件来促使 iOS 终止您的共享扩展,以便您的主应用程序可以在后台处理挂起的上传任务。

关于iOS 照片从分享扩展上传,上传完成后回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27605699/

相关文章:

python - 使用 Selenium 不使用 API 将图像发布(上传)到 Instagram

php - cURL 将文件上传到 MS Windows 上的远程服务器

swift - 使用 Swift 在 LinkedIn 上分享(无需 SDK)

ios - 覆盖滚动指示器的 UICollectionView 单元格

ios - socket.io swift 无法在真实设备上运行

asp.net - 将大文件上传到 ASP.NET MVC

html - 通过电子邮件共享 url(自动捕获 url)

ios - 我可以将 IBOutletCollection 与 WatchKit 一起使用吗?

ios - 如何防止用户将 UITableViewCell 移动到特定位置?

iphone - 以编程方式在 iPhone 上使用彩信发送图像?