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

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

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

一、前言

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

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

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

沒(méi)法子,只好開(kāi)干了。

二、整體思路

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

1、切片

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

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

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

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

js-md5  計(jì)算切片md5
spark-md5.min.js   計(jì)算hash值

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

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

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

3、切片上傳

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

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

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

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

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

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

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

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

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

所以在上傳前,可先提前發(fā)起請(qǐng)求,詢(xún)問(wèn)切片是否存在。

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

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

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

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

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

三、小結(jié)

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

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

相關(guān)文章

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

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

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

    淺談vue 移動(dòng)端完美適配方案

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了 Vue input控件通過(guò)value綁定動(dòng)態(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)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 基于Vue3和SpringBoot實(shí)現(xiàn)Web實(shí)時(shí)消息推送功能

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

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

    vue3 Composition API使用示例教程

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

最新評(píng)論

永福县| 中宁县| 三门县| 定兴县| 临朐县| 页游| 天等县| 云林县| 淅川县| 雷波县| 中西区| 永丰县| 神池县| 平南县| 闽侯县| 祥云县| 太谷县| 芜湖市| 汉寿县| 伊吾县| 辽宁省| 新源县| 崇义县| 长泰县| 吉林省| 怀化市| 咸阳市| 六盘水市| 孝感市| 西宁市| 潮州市| 北票市| 敦煌市| 资兴市| 阳信县| 化德县| 连平县| 抚远县| 铁岭市| 稷山县| 徐汇区|