Состояние прогресса Alamofire, отображающее 0.0 в некоторых случаях использования URL-адреса на быстром ios - PullRequest
0 голосов
/ 14 ноября 2018

КОД:

Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in

            DispatchQueue.main.async {
                print(progress.fractionCompleted)
                successCallback(progress.fractionCompleted as Double)

            }

        }).responseData { (response) in
            print(response.result)
            completionCallback(response as DataResponse)

            switch response.result {
            case .success(let responseJSON):
                print(responseJSON)
            case .failure(let error):
                failureCallback(error.localizedDescription)
            }
        }

1 Ответ

0 голосов
/ 14 ноября 2018

Заголовок HTTP Content-Length необходим для определения хода выполнения. Alamofire знает размер полученных данных, но чтобы показать прогресс, ему нужно всего Content-Length

Здесь я подготовил образец теста. Я буду сравнивать два сайта

  1. https://www.cocoacontrols.com
  2. https://www.stackoverflow.com

Первый не имеет Content-Length в своих ответах, а второй имеет.

Используйте CURL для проверки заголовков HTTP.

curl -I https://www.cocoacontrols.com

...

... // в этом выводе нет заголовка длины содержимого.

...

curl -I https://www.stackoverflow.com

...

длина содержимого: 149

...

Образец теста.

func sampleTest(link: String) {
    let url = URL.init(string: link)!
    Alamofire.request(url,
                      method: .get,
                      parameters: nil,
                      encoding: JSONEncoding.default,
                      headers: nil)
        .downloadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
            print("TEST Progress: \(progress.fractionCompleted)")
        }
        .validate { _, _, _ in
            return .success
        }
        .responseData { response in
            print("repsonse received")
    }
} 

Теперь вызываем этот метод следующим образом

Тест № 1

sampleTest(link: "https://www.cocoacontrols.com")

Выход № 1

TEST Progress: 0.0   
TEST Progress: 0.0   
TEST Progress: 0.0   
TEST Progress: 0.0

Тест № 2

sampleTest(link: "https://www.stackoverflow.com")

Выход № 2

TEST Progress: 0.0   
TEST Progress: 0.0   
TEST Progress: 0.8040637101235478 
TEST Progress: 1.0

Надеюсь, это поможет понять вашу проблему пропуска заголовка Content-Length в вашем HTTP-ответе. Для дальнейшего использования, даже существует проблема github в репозитории Alamofire, которая сталкивается с той же проблемой, решаемой добавлением заголовка Content-Lenght с добавлением в поле HEADER ответа.

...