使用Alamofire multipart显示带有上传进度的通知

时间:2019-07-15 13:38:29

标签: ios swift file-upload background alamofire

我需要将多个文件(图像,文档等)上传到服务器,因此我决定对多部分请求使用Alamofire

自然,这是一个耗时的操作,应该在后台完成,所以我的问题是:如何正确执行此操作? 上传完成后,我需要进度更新和事件。

我搜索了Google,但很少有帖子提供任何信息。通常使用URLSession,但没有与Alamofire或类似库相关的适当示例。

1 个答案:

答案 0 :(得分:-1)

我相信Alamofire具有一些内置功能来帮助解决此问题。在此处查看提供的文档和示例:

https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#upload-progress

编辑:添加示例代码。

我还没有测试以下内容,但是我可以使您接近想要的位置。我认为您需要确保已启用后台获取功能以及外部附件通讯功能。

Background Modes

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
            }
    })
}