在swift中的自定义标题中获取具有文件大小的下载文件的进度

Posted

技术标签:

【中文标题】在swift中的自定义标题中获取具有文件大小的下载文件的进度【英文标题】:get progress of downloaded file with file's size in a custom header in swift 【发布时间】:2019-07-02 13:30:21 【问题描述】:

我有一个端点,可以让我在我的 swift 应用程序中下载一个 zip 文件。但问题是端点以自定义标头而不是内容长度向我发送文件的大小,因为它使用 Transfer-Encoding: 分块。我正在使用 alamofire 来管理请求,但库默认使用 content-length 标头来跟踪进度。 是否有解决方案可以在 alamofire 中使用自定义标头跟踪进度,如果没有,如何使用自定义标头跟踪进度并在进度视图中显示。 谢谢你们的帮助!

【问题讨论】:

【参考方案1】:

没有简单的方法可以做到这一点,也根本没有办法下载到文件。对于数据传输,您需要做的是:

    实现urlSession(_:dataTask:didReceive:completionHandler:) 委托方法以侦听您的请求收到的初始URLResponse。 存储响应后,在urlSession(_:dataTask:didReceive:) 方法中跟踪您在下载时收到的Data,使用下载的总数据与Len 标头中的值更新任何进度。李>

这将需要对 Alamofire 本身进行修改,而这可能会涉及。如果可能的话,看看端点是否可以返回 Content-Length 标头会更好。

【讨论】:

明确回答感谢@John 的帮助,如果他可以先添加内容长度标头,我将与后端开发人员一起查看 查过了,因为 chunked Transfer-Encoding 设置特别省略了 Content-Length 标头,我不确定手动添加它是否会让它被底层网络自动拾取系统。如果可以的话,完全放弃 chunked 编码可能是一个更好的主意,尤其是因为它与 HTTP/2 完全不兼容。

以上是关于在swift中的自定义标题中获取具有文件大小的下载文件的进度的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?

单击Swift 4中的自定义按钮时调整单元格大小

`convertFromSnakeCase` 策略不适用于 Swift 中的自定义 `CodingKeys`

swift和xcode 6中的自定义标签栏

如何在 Swift 的自定义单元格中获取值组件的 indexPath?

swift中的自定义集合视图单元格