Javascript是一種廣泛應用于Web端編程語言。它可以使我們的網站更加完美,將用戶體驗提升到極致,其中斷點上傳技術,也就是從上傳文件斷點處開始上傳功能,近年來被越來越多的開發者所使用。接下來,我們將詳細介紹Javascript斷點上傳功能。
斷點上傳的原理其實很簡單,就是將一個大文件分割成多個小文件,通過多次上傳實現整個文件上傳的功能。這樣可以有效防止因中途網絡不穩定或其他問題導致文件上傳失敗的情況。為了實現這個功能,我們需要運用到Javascript中的一些特性。
首先,我們需要在前端創建一個文件上傳界面,并且通過HTML5 FormData對象來傳遞文件數據。這個界面中需要一個按鈕讓用戶點擊進行上傳,并且需要一個進度條來顯示上傳進度。代碼如下所示:
接下來,我們需要在Javascript中編寫一個上傳函數,該函數將會處理文件切割和上傳操作。首先,我們需要通過FileReader對象來讀取文件,讀取完畢后將文件分割成若干個小塊。代碼非常簡單,如下所示:上傳文件:
上傳進度:
function upload(){ var file = document.getElementById('file').files[0]; var fileSize = file.size; var blockSize = 1024*1024; var blockNum = Math.ceil(fileSize/blockSize); for(var i=0;i通過上述代碼,我們先將文件大小和塊大小計算出來,然后循環塊,依次切割文件并將其上傳。到此為止,我們已經可以實現多次上傳分塊文件的功能了。 但是這僅僅是最簡單的實現方式,為了提高文件上傳性能,我們需要增加一些企業級的功能,比如斷點續傳、上傳進度顯示以及文件秒傳。 首先來看一下斷點續傳功能,思路很簡單,通過Ajax請求將每個小塊文件上傳到服務器端,并且在上傳過程中記錄上傳進度,如果上傳失敗了,則可以通過記錄的進度重新開始上傳,以此達到斷點續傳的目的。代碼如下所示: function upload(){ var file = document.getElementById('file').files[0]; var fileSize = file.size; var blockSize = 1024*1024; var blockNum = Math.ceil(fileSize/blockSize); var fileId = createFileId();//文件唯一標識Id var loadedFile = getLoadedFile(fileId);//記錄已上傳的塊數據 var xhrArr = [];//存儲每一個請求的xhr for(var i=0;i在上述代碼中,我們將每一個請求的xhr存到xhrArr數組中,用來在上傳出錯時記錄進度。通過index屬性來記錄是哪一個塊正在上傳,然后發送請求,請求頭部分需要設置文件的唯一ID以及塊的索引值。如果上傳成功,則將this.index值存入loadedFile數組中,如果所有塊上傳完成,則執行全部完成的邏輯。 同時,上傳進度的展示也非常簡單,只需在xhr的onprogress事件處理中記錄已上傳的大小,并通過進度條展示。如下所示:= 0) continue;//如果塊已經上傳,則跳過 var xhr = new XMLHttpRequest(); xhr.index = i; xhrArr.push(xhr); xhr.open('POST', '/upload.php', true); xhr.setRequestHeader('Content-Type', 'application/octet-stream'); xhr.setRequestHeader('X-File-Id', fileId); xhr.setRequestHeader('X-Block-Index', i); xhr.onload = function(event){ if(event.target.status == 200){ loadedFile.push(this.index); if(loadedFile.length == blockNum){ //全部上傳完成 } } }; xhr.send(blob); } } xhr.upload.onprogress = function(event){ var loaded = event.loaded;//已上傳的大小 var total = event.total;//文件總大小 var percent = Math.floor(loaded/total*100)+'%';//百分比 document.getElementById('progress').value = percent;//更新進度條 };最后是文件秒傳功能,這個功能主要是通過計算文件的hash等特征值來判斷文件是否已經上傳過。如果文件已經上傳過,則直接返回已上傳的文件路徑,否則則按照正常上傳流程進行上傳。 以上就是Javascript實現斷點上傳的一些關鍵步驟和技巧,通過這些技術,我們可以輕松實現多次上傳分塊文件、斷點續傳、上傳進度展示以及文件秒傳等功能,從而提高文件上傳的穩定性和性能。