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

el-upload大文件切片上傳實(shí)現(xiàn)示例詳解

 更新時(shí)間:2023年03月15日 09:06:03   作者:小亮_money  
這篇文章主要為大家介紹了el-upload大文件切片上傳實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

前端上傳大文件時(shí),會(huì)出現(xiàn)跨域錯(cuò)誤等各類錯(cuò)誤,另切片上傳可以提高上傳效率。固進(jìn)行以下代碼記錄,方便后期cv(??)

html

<el-upload action="" :data="uploadData" :http-request="uploadFileContinue">
</el-upload>

js

export default {
  name: '',
  data () {
    return {
    uploadData:{
        key: ""
    }
  },
  watch: {
  },
  computed: {
  },
  created () {
  },
  mounted () {
  },
  destroyed () {
  },
  methods: {
    async uploadFileContinue({ data, file }) {
            //data是上送的額外參數(shù),也就是el-upload中的:data="uploadData",根據(jù)實(shí)際需求帶入
            //file是文件
            let url = "/api/XXX" //上傳文件接口
            try {
                data.file = file;
                data.key = file.name
                const res = await this.uploadByPieces(url, data);
                return res;
            } catch (e) {
                return e;
            }
        },
       async uploadByPieces:(url, { key,file }) {
            // 每5M一片,進(jìn)行切片
            const chunkSize = 5 * 1024 * 1024; // 5MB一片
            // 總片數(shù)
            const chunkCount = Math.ceil(file.size / chunkSize); 
            // 生成promise集合,進(jìn)行異步處理
            // 也就是Promise.all的使用
            const promiseList = []
            try {
                for (let index = 0; index < chunkCount; ++index) {
                    //異步執(zhí)行分片上傳
                    promiseList.push(readChunk(index))
                }
                const res = await Promise.all(promiseList)
                return res
            } catch (e) {
                return e
            }
            //-----以上是切片上傳的主要邏輯,是比較簡(jiǎn)單的
            //-----以下是切片時(shí)需要調(diào)用的方法
            // 獲取當(dāng)前chunk數(shù)據(jù)
            const getChunkInfo = (file, index) => {
                let start = index * chunkSize;
                let end = Math.min(file.size, start + chunkSize);
                let chunk = file.slice(start, end);
                return { start, end, chunk };
            };
            // 分片上傳接口
            const uploadChunk = (data) => {
            // 因該項(xiàng)目用到的是ajax,所以進(jìn)行以下寫法
            // 同樣可更改為axios,原理一樣,主要是配合插件,返回Promise
                return new Promise((resovle, reject) => {
                    $.ajax({
                        url: url,
                        type: 'POST',
                        data: data,
                        contentType: false,
                        processData: false,
                        success: function (res) {
                            resovle(res);
                        },
                        error: function (err) {
                            reject(err);
                        }
                    })
                })
            }
            // 針對(duì)單個(gè)文件進(jìn)行chunk上傳
            const readChunk = (index) => {
                const { chunk } = getChunkInfo(file, index);
                let formdata = new FormData();
                formdata.append("key", key);
                formdata.append("file", chunk);
                return uploadChunk(formdata)
            }
        },
  }
}

備注

切片上傳后,需要將文件合并才能使用文件的預(yù)覽,文件合并由服務(wù)端進(jìn)行。

以上就是el-upload大文件切片上傳實(shí)現(xiàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于el upload大文件切片上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue.js中數(shù)組變動(dòng)的檢測(cè)詳解

    Vue.js中數(shù)組變動(dòng)的檢測(cè)詳解

    這篇文章給大家主要介紹了Vue.js中數(shù)組變動(dòng)的檢測(cè),文中給出了詳細(xì)的示例代碼和過(guò)程介紹,相信會(huì)對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • 解決vue前后端端口不一致的問題

    解決vue前后端端口不一致的問題

    這篇文章主要介紹了解決vue前后端端口不一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Vue3+vite路由配置優(yōu)化(自動(dòng)化導(dǎo)入)

    Vue3+vite路由配置優(yōu)化(自動(dòng)化導(dǎo)入)

    這篇文章主要介紹了Vue3+vite路由配置優(yōu)化(自動(dòng)化導(dǎo)入),需要的朋友可以參考下
    2023-09-09
  • webpack如何打包一個(gè)按需引入的vue組件庫(kù)

    webpack如何打包一個(gè)按需引入的vue組件庫(kù)

    在vue項(xiàng)目開發(fā)中,我們會(huì)將經(jīng)常用到的邏輯或模塊抽象成組件,對(duì)于那些多個(gè)項(xiàng)目都有用到的組件,可以考慮封裝成組件庫(kù),這篇文章主要給大家介紹了關(guān)于webpack如何打包一個(gè)按需引入的vue組件庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Vue3?計(jì)算屬性computed的實(shí)現(xiàn)原理

    Vue3?計(jì)算屬性computed的實(shí)現(xiàn)原理

    這篇文章主要介紹了Vue3?計(jì)算屬性computed的實(shí)現(xiàn)原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn)

    文件上傳在很多項(xiàng)目中都用的到,如果是幾M的很快就傳送完畢,如果是大文件呢?本文就介紹了Vue 大文件上傳和斷點(diǎn)續(xù)傳的實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06
  • vuejs 動(dòng)態(tài)添加input框的實(shí)例講解

    vuejs 動(dòng)態(tài)添加input框的實(shí)例講解

    今天小編就為大家分享一篇vuejs 動(dòng)態(tài)添加input框的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Vue3中defineEmits、defineProps?不用引入便直接用

    Vue3中defineEmits、defineProps?不用引入便直接用

    這篇文章主要介紹了Vue3中defineEmits、defineProps?不用引入便直接用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • element-ui動(dòng)態(tài)添加表單項(xiàng)并實(shí)現(xiàn)事件觸發(fā)驗(yàn)證代碼示例

    element-ui動(dòng)態(tài)添加表單項(xiàng)并實(shí)現(xiàn)事件觸發(fā)驗(yàn)證代碼示例

    這篇文章主要給大家介紹了關(guān)于element-ui動(dòng)態(tài)添加表單項(xiàng)并實(shí)現(xiàn)事件觸發(fā)驗(yàn)證的相關(guān)資料,其實(shí)就是利用了vue的v-for循環(huán)渲染,通過(guò)添加數(shù)組實(shí)現(xiàn)動(dòng)態(tài)添加表單項(xiàng),需要的朋友可以參考下
    2023-12-12
  • Vue制作Todo List網(wǎng)頁(yè)

    Vue制作Todo List網(wǎng)頁(yè)

    這篇文章主要為大家詳細(xì)介紹了Vue制作Todo List網(wǎng)頁(yè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論

桂林市| 大新县| 抚松县| 武乡县| 婺源县| 龙山县| 延寿县| 扎赉特旗| 田东县| 辽阳县| 房产| 安岳县| 洪江市| 宁河县| 攀枝花市| 屯留县| 玉溪市| 交城县| 望奎县| 富阳市| 油尖旺区| 揭阳市| 梧州市| 灵山县| 科技| 邢台市| 鄱阳县| 荣成市| 莲花县| 辽中县| 大兴区| 台东县| 东乡| 滦南县| 察雅县| 奇台县| 六盘水市| 张北县| 筠连县| 沁阳市| 牡丹江市|