- 製作動機:一些提供照片上傳的網站,通常都有提供批次上傳的功能、也就是有許多的 Input File 欄位的表單,但缺點是必須等所有的檔案都上傳到伺服器才會處理,在上傳的過程中使用者無從得知上傳的進度,使用者也可能會因等待過久而重複送出表單或直接移往別頁,造成的問題便是頻寬的浪費與介面的不親和。有鑑於此,希望利用 Web 2.0 的技術改善使用者批次上傳的介面。
- 改善方式:AJAX 沒辦法做檔案上傳,所以表單還是藉由傳統的 POST 配合 enctype="multipart/form-data" 的方式送出,但我並不希望因表單送出造成換頁,所以在處理上傳檔案的那一頁中、Header 設定為 204 No Content,如此頁面就不會 Redirect。接著上傳的程式會產生一個 flag.txt,其實在表單送出的那一刻,我就一直利用 AJAX 去呼叫 validate.php 這隻去檢查 flag.txt 是否存在,一旦存在就會回傳到現有頁面、並且把 flag.txt 給刪掉,再重複進行下一個檔案的上傳。
- 檔案下載:若您對此範例有興趣,可按此下載。
- 測試方式:請選擇您電腦裡面較小的檔案上傳,以容易看出效果。
版本改進
- 1.0:一開始是利用不斷檢查 cookies 做上傳與否的判斷
- 2.0:上傳時增加遮罩以避免使用者與表單繼續互動、增加完成訊息、增加檔案瀏覽頁面、增加 Progress Bar、感謝 Aaron Wu 建議讓使用者可以中斷上傳的功能,做出停止上傳的功能及繼續上傳的功能
- 3.0:感謝 Einstein Liao 建議採用偵測檔案的方法取代較不可信賴的 Cookie 偵測