上傳檔案其實還有蠻多議題可以討論,那我們今天就一一道來XD
檔案上傳昨天我們有提到,可以用FormData的型式,透過API傳給後端。
由於新版的XMLHttpRequest的優化,XMLHttpRequest提供progress事件,可以提供進度資訊。檔案傳輸下載或上傳時,可以利用progress事件知道目前的進度。
今天我們要使用的範例是使用axios,不同的方法語法上有些許不同,不過概念上都是一樣的。透過progress事件,取得上傳進度。
HTML
<input type="file" @change="updateFile">
<button @click="submit">上傳</button>
<p>上傳進度: {{progress}}</p>
Javascript
// 選取檔案
updateFile(e){
this.file = e.target.files[0];
},
//上傳檔案
submit(){
let fd = new FormData()
form.append('file', this.file)
let config = {
onUploadProgress: progressEvent => {
let complete = (progressEvent.loaded / progressEvent.total * 100 | 0) '%'
this.progress = complete
}
}
axios.post(`APIURL`,fd, config).then((res) => {
if (res.data.status === 'success') {
console.log('上傳成功')
}
})
}
Checksum,也可以稱雜湊碼(hash sum)。是透過雜湊演算法(Ex.MD5、SHA-1、CRC32、SHA-256...)計算而成一個獨一無二的數字文字組合。只要input相同,透過同樣的演法計算,output的checksum一定相同。在上傳檔案時,會用checksum用來檢查檔案是否完整或正確。
分片上傳的意思是:我們會把檔案做切割,分成一塊一塊的小分片,上傳至後端,再由後端合併起來。
1個檔案 = 多個block
1的block = 多個chunk(片)
chunk只是上傳時的臨時單位,一般server會設計在固定的時間清除沒有被合併成檔案的chunk
為什麼要這麼麻煩呢?又要怎麼做呢?接下來介紹一下分片上傳的概念~
由於每種程式的寫法可能會有些許差異,今天我們就介紹分片上傳的流程想法~
檔案上傳真的蠻多東西可以探討,包含續傳、秒傳等等,
但只要大概理解這些檔案相關的觀念,在實作上都可以更容易地去應用開發~~