使用 Hellweba 多圖上傳範例,頁面重整後無法繼續上傳,甚至上傳功能完全失效。
HTTP 協定是 無狀態 的。上傳過程中,瀏覽器與伺服器維持一條長連線傳輸二進位資料。使用者點擊「重整」或按 F5 時,瀏覽器會 終止所有進行中的請求與連線,包含正在上傳的檔案串流。伺服器端收到斷開訊號,會捨棄已接收的部分資料,導致上傳失敗。
beforeunload 事件提醒使用者上傳進行中。
window.addEventListener('beforeunload', e => {
if (uploading) {
e.preventDefault();
e.returnValue = '上傳尚未完成,確定離開?';
}
});
iframe 進行上傳,主頁面重整不影響背景任務(現代瀏覽器支援有限)。