gpt4 book ai didi

ios - 在使用 swift ios 的某些 URL 情况下,Alamofire 进度状态显示 0.0

转载 作者:搜寻专家 更新时间:2023-11-01 06:56:02 31 4
gpt4 key购买 nike

代码:

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

最佳答案

需要 HTTP header Content-Length 来确定进度。 Alamofire 知道接收到的数据大小,但要显示进度,它需要总的 Content-Length

我在这里准备了一个样本测试。我将比较两个网站

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

第一个在他们的响应中没有Content-Length,但是第二个有。

使用 CURL 检查 HTTP header 。

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

...

... // there is no content length header in this output.

...

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

...

content-length: 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

希望它有助于理解您在 HTTP 响应中缺少 Content-Length HEADER 的问题。为了进一步引用,即使有 github issue在 Alamofire 存储库中,面临同样的问题,通过在响应 HEADER 字段中添加 Content-Lenght header 来解决。

关于ios - 在使用 swift ios 的某些 URL 情况下,Alamofire 进度状态显示 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294752/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com