Alamofire multipartFormData Возобновите загрузку, когда ответ займет больше 1 минуты. - PullRequest
0 голосов
/ 02 марта 2019

Что я сделал?

Я пытаюсь загрузить видеофайл, используя multipartFormData, с timeoutIntervalForRequest, установленным на 300, причина истечения времени ожидания 300 в том, что после загрузки видео мой сервер принимаетоколо 2 минут для кодирования и ответа

Что я ожидал?

Я ожидал успешного ответа, когда сервер завершил кодирование и ответил данными JSON.

Что случилось вместо этого?

Всякий раз, когда ответ занимает больше 1 минуты.Alamofire возобновляет загрузку снова вместо ожидания ответа или отображения ответа JSON.

PS: эта проблема возникает только при использовании фонового SessionManager

Alamofire Environment

** Версия Alamofire: (4.8.0) ** Версия Xcode: 10 ** Версия Swift: 4.2 ** Платформа (-ы), работающая под управлением Alamofire: iOS 12

Демонстрационный проект

func uploadInBackground(fileInData: Data) {        
        let headers: [String : String] = [ "Authorization": "key"]

        Networking.sharedInstance.backgroundSessionManager.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(fileInData, withName: "file", mimeType: "video/mp4")

        }, usingThreshold: UInt64.init(), to: url, method: .post, headers: headers)
        { (result) in
            switch result {
            case .success(let upload, _, _):

                upload.uploadProgress(closure: { (progress) in
                    //Print progress
                    let value =  Int(progress.fractionCompleted * 100)
                    print("\(value) %")
                })

                upload.responseJSON { response in
                    //print response.result
                    print(response.description)
                    let res = response.response?.statusCode
                    print(res)
                }

            case .failure(let encodingError):
                //print encodingError.description
                print(encodingError.localizedDescription)
            }
        }
    }.
class Networking {
    static let sharedInstance = Networking()
    public var sessionManager: Alamofire.SessionManager // most of your web service clients will call through sessionManager
    public var backgroundSessionManager: Alamofire.SessionManager // your web services you intend to keep running when the system backgrounds your app will use this
    private init() {
        let defaultConfig = URLSessionConfiguration.default
        defaultConfig.timeoutIntervalForRequest = 300


        let backgroundConfig = URLSessionConfiguration.background(withIdentifier: "com.test.app")
        backgroundConfig.timeoutIntervalForRequest = 300

        self.sessionManager = Alamofire.SessionManager(configuration: defaultConfig)
        self.backgroundSessionManager = Alamofire.SessionManager(configuration: backgroundConfig)

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...