我需要将多个文件(图像,文档等)上传到服务器,因此我决定对多部分请求使用Alamofire
。
自然,这是一个耗时的操作,应该在后台完成,所以我的问题是:如何正确执行此操作? 上传完成后,我需要进度更新和事件。
我搜索了Google,但很少有帖子提供任何信息。通常使用URLSession
,但没有与Alamofire
或类似库相关的适当示例。
答案 0 :(得分:-1)
我相信Alamofire具有一些内置功能来帮助解决此问题。在此处查看提供的文档和示例:
https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#upload-progress
编辑:添加示例代码。
我还没有测试以下内容,但是我可以使您接近想要的位置。我认为您需要确保已启用后台获取功能以及外部附件通讯功能。
Networking.swift
import Foundation
import Alamofire
class Networking {
static let sharedInstance = Networking()
public var sessionManager: Alamofire.SessionManager // Use this for most calls
public var backgroundSessionManager: Alamofire.SessionManager // Use this for background calls
private init() {
self.sessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.default)
self.backgroundSessionManager = Alamofire.SessionManager(configuration: URLSessionConfiguration.background(withIdentifier: "com.youApp.identifier.backgroundtransfer"))
}
}
let backgroundManager = Networking.sharedInstance.backgroundSessionManager
ViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
backgroundManager.upload(multipartFormData: { multipartFormData in
multipartFormData.append(unicornImageURL, withName: "unicorn")
multipartFormData.append(rainbowImageURL, withName: "rainbow")
},
to: "https://httpbin.org/post",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
// Show local notification success here
}
case .failure(let encodingError):
print(encodingError)
// Show local notification failure here
}
})
}