我在 django 项目中实现了一个下载视图,它构建了一个 zip 存档并动态传输它。
存档中包含的文件是 1 个
tsv
文件和任意数量的 xml
(来自一组搜索结果),这些文件被组织到一系列目录中。
下载可以,但没有任何进展。 我们测试了一个小下载 (47Mb) 和一个大下载 (3Gb)。
我认为最好有一个进度条,让用户了解下载需要多长时间,但是,从我读到的内容来看,预测 zip 文件的大小是很棘手/容易发生的-不准确,所以我想知道(因为我对 zip 文件生成非常缺乏经验[更不用说流式下载了])...
我应该考虑这个问题空间的替代解决方案吗?
阿萨拉姆·阿莱库姆。
本案中的行为并不多。有一些:
如果您在响应标头中指定大致大小,下载仍将开始,并且大多数浏览器或下载管理器将根据该值显示进度。
太大:进度条可能会显示 100%,直至下载完成。这可能会让用户感到困惑,但下载仍然会正确完成。 太小:进度可能会超过100%,也可能会比较混乱,但不影响下载。
我推荐的解决方案:
使用分块传输编码。这是一种更可靠的分块传输大文件的方法。数据以固定块的形式传输,大容量传输更加便捷高效。然而,一个缺点是完成百分比和总文件大小可能无法准确显示。
使用AJAX请求获取状态。实现一个单独的 API 端点,该端点将返回存档和下载的当前状态,例如,已将多少文件添加到存档中。在客户端上,您可以制作一个进度条,定期请求此 API。