最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、前言

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

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

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

沒法子,只好開干了。

二、整體思路

這么大文件,一次性上傳明顯不現(xiàn)實(shí),因?yàn)槊看我粩嗑W(wǎng),那就會從頭開始上傳,體驗(yàn)感極差。所以切片勢在必行,關(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ù)實(shí)際情況選擇即可,但記得提前跟后端溝通。

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

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

3、切片上傳

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三、小結(jié)

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

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

相關(guān)文章

  • 一文詳解Vue.js與TypeScript的生命周期

    一文詳解Vue.js與TypeScript的生命周期

    Vue與TypeScript的結(jié)合使得開發(fā)大型應(yīng)用變得更加容易和高效,本文將詳細(xì)探討Vue.js組件中TypeScript的應(yīng)用,特別是它的生命周期鉤子函數(shù),并通過豐富的示例,為你提供一個實(shí)戰(zhàn)指南,需要的朋友可以參考下
    2023-11-11
  • 淺談vue 移動端完美適配方案

    淺談vue 移動端完美適配方案

    最近接觸了一個項(xiàng)目,vue怎么在不同屏幕上做根據(jù)不同屏幕大小適配,本文就詳細(xì)的來介紹一下,感興趣的可以了解一下
    2021-09-09
  • 詳解Vue SPA項(xiàng)目優(yōu)化小記

    詳解Vue SPA項(xiàng)目優(yōu)化小記

    這篇文章主要介紹了詳解Vue SPA項(xiàng)目優(yōu)化小記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • uniapp微信小程序WebApi_openid、phone接口獲取代碼詳解

    uniapp微信小程序WebApi_openid、phone接口獲取代碼詳解

    本文主要記錄了微信小程序接口調(diào)用的過程,首先查看uniapp文檔和微信API文檔,獲取openid和phone,然后通過uniapp實(shí)現(xiàn)獲取openid和電話號碼,但遇到了合法域名屏蔽的問題,最后通過將微信訪問遷移到后臺解決,需要的朋友可以參考下
    2024-10-10
  • vue-cli 如何打包上線的方法示例

    vue-cli 如何打包上線的方法示例

    這篇文章主要介紹了vue-cli 如何打包上線的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Vue使用xlsx組件輕松實(shí)現(xiàn)Excel導(dǎo)出的完整代碼

    Vue使用xlsx組件輕松實(shí)現(xiàn)Excel導(dǎo)出的完整代碼

    在日常開發(fā)中,Excel導(dǎo)出是管理系統(tǒng)的高頻需求,本文手把手教你如何在Vue項(xiàng)目中快速實(shí)現(xiàn)Excel導(dǎo)出功能,支持復(fù)雜表格樣式,并附贈性能優(yōu)化方案,需要的朋友可以參考下
    2025-05-05
  • Vue input控件通過value綁定動態(tài)屬性及修飾符的方法

    Vue input控件通過value綁定動態(tài)屬性及修飾符的方法

    這篇文章主要介紹了 Vue input控件通過value綁定動態(tài)屬性及修飾符的方法,需要的朋友可以參考下
    2017-05-05
  • Vue子組件關(guān)閉后調(diào)用刷新父組件的實(shí)現(xiàn)

    Vue子組件關(guān)閉后調(diào)用刷新父組件的實(shí)現(xiàn)

    這篇文章主要介紹了Vue子組件關(guān)閉后調(diào)用刷新父組件的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于Vue3和SpringBoot實(shí)現(xiàn)Web實(shí)時消息推送功能

    基于Vue3和SpringBoot實(shí)現(xiàn)Web實(shí)時消息推送功能

    這篇文章主要介紹了WebSocket實(shí)現(xiàn)實(shí)時通信,對比HTTP低效,通過SpringBoot+Vue整合實(shí)現(xiàn)消息推送,涵蓋聊天、股票等場景,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-05-05
  • vue3 Composition API使用示例教程

    vue3 Composition API使用示例教程

    Vue3新增了Composition API,我們只需將實(shí)現(xiàn)某一功能的相關(guān)代碼全部放進(jìn)一個函數(shù)中,然后return需要對外暴露的對象,這篇文章主要介紹了vue3 Composition API使用,需要的朋友可以參考下
    2022-12-12

最新評論

洛阳市| 酉阳| 临泽县| 金塔县| 类乌齐县| 房山区| 沛县| 贵港市| 普兰县| 浮山县| 北碚区| 正镶白旗| 石渠县| 留坝县| 凤阳县| 大宁县| 阿城市| 白朗县| 文登市| 景泰县| 高碑店市| 伊吾县| 利辛县| 化州市| 临西县| 唐海县| 枣庄市| 马山县| 惠水县| 汉沽区| 万州区| 鱼台县| 内乡县| 沙雅县| 泌阳县| 花莲市| 广丰县| 石泉县| 罗定市| 外汇| 枞阳县|