在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 的自定义单元格中获取滑块的值?
`convertFromSnakeCase` 策略不适用于 Swift 中的自定义 `CodingKeys`