問題:在axios監聽ondownloadprogress下載文件進度發現total為0,其實是response header的content-length丟失,content-length丟失之后就導致無法獲取到該文件的大小,無法處理下載進度。
原因:
原因一、很簡單,可能只是后端沒有返回content-length,讓后端工程師加上就行。
原因二、開啟了gzip。開啟gzip之后服務器默認就會開啟文件分塊編碼【Transfer-Encoding: chunked】,分塊編碼把「報文」分割成若干個大小已知的塊,塊之間是緊挨着發送的。
采用這種傳輸方式進行響應時,沒必要帶上Content-Length這個首部信息。因為即使帶上了也是不准確的,所以content-length會沒有。
解決方式之一:
后端把文件大小存儲到其他字段,比如:header['x-content-length'];
如有其他方式可以討論一下。
參考:
https://github.com/axios/axios/issues/1591
https://segmentfault.com/a/1190000006194778