xhr監聽上傳進度顯示不準確?
如果你是用這種方式上傳的話,確實沒有好方法。
因為 XMLHttpRequest.onProgress 事件能拿到的是網絡傳輸的字節而已;你說的問題里,“上傳進度已完成”,實際是指瀏覽器已經把文件傳輸給了服務端;“很久才可以”,是你服務端額外處理的時間,這段時間對瀏覽器來說是不可感知的,它怎么會知道你服務端處理需要多久呢? 一般處理思路有這么幾種:1、上傳進度設置一個最大值,比如 99%,只有當服務端真正返回結果時才會變到 100%,這種方法最為簡單粗暴;
2、盡量減少服務端處理的時間,例如收到文件后交給異步隊列去處理,立刻返回給客戶端響應,這種方法需要額外做的事件比較多,開發難度更高一些;
3、客戶端分片上傳,把大文件變成若干段小“文件”,缺點是瀏覽器只有支持 HTML5 才支持 FormData 分片。