java web如何监控文件下载进度

已知方案有兩個:
1實時更新session 的值,前端通過ajax 輪詢獲取進度(存在浪費資源的問題)
2設置Content-Length(存在嚴重bug)

下载文件的时候,告诉前端文件大小,前端自己计算文件以下载文件大小和总大小相比,然后进行显示

  1. 最简单的办法就是直接请求一个get连接,请求中直接使用respone直接交给浏览器,不给返回参数,这样浏览器会自定识别为文件,下载会有自带的进度条显示的。
  2. 要不就是使用一个旋转的图代替给用户一个假的提醒,为的是知道系统正在下载文件。
  3. 如果是前后端分离的话,这个可考虑一个请求下载的同时,再使用定时器间隔一定时间内发送另一个请求,这个请求用于获取下载进度使用。这种最好使用session去存储。等下载完成之后再把session值删掉就可以了。否则需要定义一个全局map来存储最好。

我建议不用去手动去监听了,很麻烦,第一种办法最省事,而且就类似于浏览器中下载软件那样的效果,还不错

http://www.axios-js.com/zh-cn/docs/#axios-config

img

用axios去下载,然后再用blob把流转换为文件。