中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

el-upload大文件切片上傳怎么實現

發布時間:2023-03-15 14:42:52 來源:億速云 閱讀:134 作者:iii 欄目:開發技術

這篇文章主要介紹“el-upload大文件切片上傳怎么實現”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“el-upload大文件切片上傳怎么實現”文章能幫助大家解決問題。

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是上送的額外參數,也就是el-upload中的:data="uploadData",根據實際需求帶入
            //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一片,進行切片
            const chunkSize = 5 * 1024 * 1024; // 5MB一片
            // 總片數
            const chunkCount = Math.ceil(file.size / chunkSize); 
            // 生成promise集合,進行異步處理
            // 也就是Promise.all的使用
            const promiseList = []
            try {
                for (let index = 0; index < chunkCount; ++index) {
                    //異步執行分片上傳
                    promiseList.push(readChunk(index))
                }
                const res = await Promise.all(promiseList)
                return res
            } catch (e) {
                return e
            }
            //-----以上是切片上傳的主要邏輯,是比較簡單的
            //-----以下是切片時需要調用的方法
            // 獲取當前chunk數據
            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) => {
            // 因該項目用到的是ajax,所以進行以下寫法
            // 同樣可更改為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);
                        }
                    })
                })
            }
            // 針對單個文件進行chunk上傳
            const readChunk = (index) => {
                const { chunk } = getChunkInfo(file, index);
                let formdata = new FormData();
                formdata.append("key", key);
                formdata.append("file", chunk);
                return uploadChunk(formdata)
            }
        },
  }
}

備注

切片上傳后,需要將文件合并才能使用文件的預覽,文件合并由服務端進行。

關于“el-upload大文件切片上傳怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开化县| 分宜县| 贞丰县| 勃利县| 句容市| 巴青县| 什邡市| 富源县| 伊川县| 天台县| 策勒县| 安化县| 古交市| 古蔺县| 通州区| 阿坝县| 玉树县| 富锦市| 石城县| 泸西县| 达孜县| 永仁县| 江孜县| 西宁市| 阿合奇县| 黑龙江省| 莆田市| 铁力市| 丽水市| 内丘县| 皋兰县| 方山县| 玉田县| 托克逊县| 施秉县| 南雄市| 于都县| 土默特左旗| 新沂市| 手游| 孟州市|