Что я сделал?
Я пытаюсь загрузить видеофайл, используя 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)
}
}