欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實現(xiàn)大文件切片斷點續(xù)傳

 更新時間:2023年07月25日 09:06:21   作者:地霊殿__三無  
上傳文件,基本上用了input框就可以解決,但大文件應(yīng)該怎樣上傳呢,一次性上傳明顯不現(xiàn)實,因為每次一斷網(wǎng),那就會從頭開始上傳,所以切片勢在必行,關(guān)鍵就是如何切,怎么保障文件數(shù)據(jù)不會丟失,同時優(yōu)化上傳保障機(jī)制,本文就來給大家講講如何上傳大文件

一、前言

說起上傳文件,基本上用了input框就可以解決。

直到這天,后端找到我說,這個100g的視頻,看看怎么樣才能上傳。

100g,我看了看飄紅的c盤(剩余空間7.86g),好家伙,我c盤都放不下100g,你現(xiàn)在要我通過網(wǎng)頁上傳。

沒法子,只好開干了。

二、整體思路

這么大文件,一次性上傳明顯不現(xiàn)實,因為每次一斷網(wǎng),那就會從頭開始上傳,體驗感極差。所以切片勢在必行,關(guān)鍵就是如何切,怎么保障文件數(shù)據(jù)不會丟失,同時優(yōu)化上傳保障機(jī)制。

1、切片

不管是input還是el-upload組件,本質(zhì)上拿到的文件都是blob文件格式,blob文件自帶一個slice方法,可以用來分割切片。

//一個新的?[`Blob`]?對象,它包含了原始?[`Blob`]對象的某一個段的數(shù)據(jù)
// slice接受三個參數(shù)start、end、和contentType(可選)
// start和end的距離差就是切片的文件大小,以字節(jié)為單位
const chunk = file.slice(start, end);
const blob = new Blob([chunk], { type: file.type })

這里的blob就是每一個切片了,相當(dāng)于每一個個小文件。

2、計算切片唯一碼:md5或者h(yuǎn)ash值

js-md5  計算切片md5
spark-md5.min.js   計算hash值

如果不大的話,選用js-md5即可,如果文件巨大,那可能會引起阻塞,導(dǎo)致頁面假死,所以可以選用spark-md5.min.js,來計算hash值,它使用 web-worker 在 worker 線程計算 hash,這樣用戶仍可以在主界面正常的交互。根據(jù)實際情況選擇即可,但記得提前跟后端溝通。

具體計算方法網(wǎng)上很多,就不贅述了。

計算完后,將每一個切片和對應(yīng)的唯一碼關(guān)聯(lián)起來,待下一步使用。

3、切片上傳

按小文件的形式,普通地上傳每一片。

同時需要將切片數(shù)和第二點的唯一碼,也附上,給到后端進(jìn)行文件檢驗。

根據(jù)校驗成功與否,對應(yīng)返回唯一碼和狀態(tài),前端標(biāo)記已完成和未完成的切片,

可以對失敗或者未完成的切片進(jìn)行重傳操作。

如果有并行上傳需求,那可以使用Promise.race()進(jìn)行并發(fā)請求,用Promise.all()來獲取最終完成情況。

但這也需要考慮并行數(shù)量對性能的影響。

4、上傳前檢測切片是否存在于后端

有時候因為網(wǎng)絡(luò)等問題,可能會導(dǎo)致上傳過程中途失敗等等原因,再次上傳就是重頭開始了。

這就會造成一種浪費吧,明明該切片在服務(wù)器上已經(jīng)有了,有覆蓋還行,沒有覆蓋的話,那對最終的合并肯定是會造成影響的。

所以在上傳前,可先提前發(fā)起請求,詢問切片是否存在。

存在則秒傳完成,不存在則繼續(xù)上傳,走第3點。

5、發(fā)送合并請求

在全部上傳完之后,同時全部都是成功的情況下,前端主動發(fā)送合并請求,攜帶未

切片前源文件的md5或者h(yuǎn)ash值,后端接到請求合并切片,在同路徑下,重現(xiàn)文件,并對比

md5碼或者h(yuǎn)ash值,一致則返回成功。

三、小結(jié)

本文基本上只是敘述了整體思路,思路理順了,剩下的只是在對應(yīng)的位置寫入具體的業(yè)務(wù)邏輯即可。

到此這篇關(guān)于vue實現(xiàn)大文件切片斷點續(xù)傳的文章就介紹到這了,更多相關(guān)vue大文件斷點續(xù)傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vuejs父子組件之間數(shù)據(jù)交互詳解

    vuejs父子組件之間數(shù)據(jù)交互詳解

    這篇文章主要為大家詳細(xì)介紹了vuejs父子組件之間的數(shù)據(jù)交互,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Vue代理請求數(shù)據(jù)出現(xiàn)404問題及解決

    Vue代理請求數(shù)據(jù)出現(xiàn)404問題及解決

    這篇文章主要介紹了Vue代理請求數(shù)據(jù)出現(xiàn)404的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue?PC前端掃碼登錄功能實現(xiàn)

    Vue?PC前端掃碼登錄功能實現(xiàn)

    最近在做APP客戶端掃描PC端二維碼登錄,于是記錄一下實現(xiàn)過程,下面這篇文章主要給大家介紹了關(guān)于Vue?PC前端掃碼登錄功能實現(xiàn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)詳解

    vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)詳解

    頁面跳轉(zhuǎn),我們一般都通過路由跳轉(zhuǎn)實現(xiàn),通常情況下可直接使用router-link標(biāo)簽實現(xiàn)頁面跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • vue?中使用?this?更新數(shù)據(jù)的一次問題記錄

    vue?中使用?this?更新數(shù)據(jù)的一次問題記錄

    這篇文章主要介紹了vue?中使用?this?更新數(shù)據(jù)的一次大坑?,我在 vue 實例中聲明了一個數(shù)組屬性如?books: [],在異步請求的回調(diào)函數(shù)中使用?this.books = res.data.data;?進(jìn)行數(shù)據(jù)更新,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • vue3中關(guān)于路由hash與History的設(shè)置

    vue3中關(guān)于路由hash與History的設(shè)置

    這篇文章主要介紹了vue3中關(guān)于路由hash與History的設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue在路由中驗證token是否存在的簡單實現(xiàn)

    vue在路由中驗證token是否存在的簡單實現(xiàn)

    今天小編就為大家分享一篇vue在路由中驗證token是否存在的簡單實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • element ui提交表單返回成功后自動清空表單的值的實現(xiàn)代碼

    element ui提交表單返回成功后自動清空表單的值的實現(xiàn)代碼

    這篇文章主要介紹了elementui提交表單返回成功后自動清空表單的值,本文通過兩種方法結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 利用vue組件實現(xiàn)圖片的拖拽和縮放功能

    利用vue組件實現(xiàn)圖片的拖拽和縮放功能

    這篇文章主要給大家介紹了關(guān)于利用vue組件實現(xiàn)圖片的拖拽和縮放功能的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • Antd表格滾動 寬度自適應(yīng) 不換行的實例

    Antd表格滾動 寬度自適應(yīng) 不換行的實例

    這篇文章主要介紹了Antd表格滾動 寬度自適應(yīng) 不換行的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論