成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

element-ui+vue-cli3.0:el-upload

yy13818512006 / 2313人閱讀

摘要:最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問題。下面是我對(duì)的上傳組件的一些改造,點(diǎn)擊查看源碼。

最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問題。下面是我對(duì)element-ui的上傳組件的一些改造, 點(diǎn)擊查看源碼。

我是自己維護(hù)了一個(gè)列表數(shù)據(jù),再對(duì)這個(gè)列表數(shù)據(jù)進(jìn)行一些操作,沒用組件自帶的。先看看我的組件模版
limit: 限制文件個(gè)數(shù)
action:文件的上傳地址(這里我沒有特別封裝axios,直接用默認(rèn)的)
accept:接受上傳的文件類型(字符串)
data:上傳時(shí)附帶的額外參數(shù)
multiple:多選(布爾類型,我這里設(shè)為true,即可以批量上傳)
show-file-list:是否顯示文件上傳列表
with-credentials:是否攜帶cookie,布爾類型,true表示攜帶
這是我設(shè)置的一些初始值

下面最重要的就是鉤子函數(shù)了

1、handleExceed是文件超出個(gè)數(shù)限制時(shí)的鉤子
private handleExceed(files: any, fileList: any) {
    if (fileList.length > 20) {
      this.$message.error("最多允許上傳20個(gè)文件");
      return false;
    }
  }
2、handleBeforeUpload文件上傳前的鉤子,可以做一些攔截,return false,則停止上傳
private handleBeforeUpload(file: any) {
    // 文件大小限制
    const isLt5M = file.size / 1024 / 1024 < 5;
    if (!isLt5M) {
      this.$message.error("不得超過5M");
      return isLt5M;
    }
    // 文件類型限制
    const name = file.name ? file.name : "";
    const ext = name
      ? name.substr(name.lastIndexOf(".") + 1, name.length)
      : true;
    const isExt = this.accept.indexOf(ext) < 0;
    if (isExt) {
      this.$message.error("請(qǐng)上傳正確的格式類型");
      return !isExt;
    }
    // 大小和類型驗(yàn)證都通過后,給自定義的列表中添加需要的數(shù)據(jù)
    this.objAddItem(this.tempArr, file);
  }
3、handleProgress文件上傳時(shí)的鉤子,更新進(jìn)度條的值
private handleProgress(event: any, file: any, fileList: any) {
    this.tempArr.forEach((element: any, index: number) => {
      if (element.uid === file.uid) {
        // 更新這個(gè)uid下的進(jìn)度
        const progress = Math.floor(event.percent);
        // 防止上傳完接口還沒有返回成功值,所以此處給定progress的最大值為99,成功的鉤子中再置為100
        element.progress = progress === 100 ? 99 : progress;
        this.$set(this.tempArr, index, element);
        this.$emit("changeFileList", this.tempArr);
      }
    });
  }
4、handleSuccess文件上傳成功時(shí)的鉤子
private handleSuccess(response: any, file: any, fileList: any) {
    this.tempArr.forEach((element: any, index: number) => {
      if (element.uid === file.uid) {
        element.progress = 100;
        // element.url為下載地址,一般后端人員會(huì)給你返回
        // 我這邊為了做后面的下載,先寫死鏈接供測(cè)試
        element.url = "http://originoo-1.b0.upaiyun.com/freepic/3226433.jpg!freethumb";
        this.$message.success("文件上傳成功");
        this.$set(this.tempArr, index, element);
        this.$emit("changeFileList", this.tempArr);
      }
    });
    // response是后端接口返回的數(shù)據(jù),可以根據(jù)接口返回的數(shù)據(jù)做一些操作
    // 示例
    // const bizCode = response.rspResult.bizCode;
    // switch (bizCode) {
    //   case 200:
    //     this.tempArr.forEach((element: any, index: number) => {
    //       if (element.uid === file.uid) {
    //         element.progress = 100;
    //         element.url = response.data.url; // 這是后端人員給我返回的下載地址
    //         this.$message.success("文件上傳成功");
    //         this.$set(this.tempArr, index, element);
    //         this.$emit("changeFileList", this.tempArr);
    //       }
    //     });
    //     break;
    //   default:
    //     this.tempArr.forEach((element: any, index: number) => {
    //       if (element.uid === file.uid) {
    //         this.tempArr.splice(index, 1); // 上傳失敗刪除該記錄
    //         this.$message.error("文件上傳失敗");
    //         this.$emit("changeFileList", this.tempArr);
    //       }
    //     });
    //     break;
    // }
  }
5、handleError文件上傳失敗時(shí)的鉤子
private handleError(err: any, file: any, fileList: any) {
    this.tempArr.forEach((element: any, index: number) => {
      if (element.uid === file.uid) {
        this.tempArr.splice(index, 1); // 上傳失敗刪除該記錄
        this.$message.error("文件上傳失敗");
        this.$emit("changeFileList", this.tempArr);
      }
    });
  }
添加數(shù)據(jù)函數(shù)
private objAddItem(tempArr: any[], file: any) {
    const tempObj = {
      uid: file.uid, // uid用于辨別文件
      originalName: file.name, // 列表顯示的文件名
      progress: 0, // 進(jìn)度條
      code: 200, // 上傳狀態(tài)
    };
    tempArr.push(tempObj);
    this.$emit("changeFileList", tempArr);
  }
上傳的文件下載封裝
private downloadFileFun(url: any) {
    const iframe: any = document.createElement("iframe") as HTMLIFrameElement;
    iframe.style.display = "none"; // 防止影響頁(yè)面
    iframe.style.height = 0; // 防止影響頁(yè)面
    iframe.src = url;
    document.body.appendChild(iframe); // 這一行必須,iframe掛在到dom樹上才會(huì)發(fā)請(qǐng)求
    // 5分鐘之后刪除(onload方法對(duì)于下載鏈接不起作用,就先摳腳一下吧)
    setTimeout(() => {
      iframe.remove();
    }, 5 * 60 * 1000);
  }
持續(xù)更新......

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/99635.html

相關(guān)文章

  • (小白篇)vue-cli3.0創(chuàng)建項(xiàng)目+引入element-ui

    摘要:在年月份發(fā)布了版本,經(jīng)過重構(gòu)之后,可以說是一個(gè)船心版本在項(xiàng)目都落地之后,就想升級(jí)一下版本,嘗一嘗帶來的舒適,也是為后面項(xiàng)目的開展做一個(gè)準(zhǔn)備。選了之后會(huì)詢問是否開啟模式,以及選擇預(yù)處理器,這里根據(jù)個(gè)人情況選用。 vue-cli在2018年8月份發(fā)布了3.0版本,經(jīng)過重構(gòu)之后,可以說是一個(gè)船心版本!在項(xiàng)目都落地之后,就想升級(jí)一下cli版本,嘗一嘗3.0帶來的舒適,也是為后面項(xiàng)目的開展做一個(gè)...

    avwu 評(píng)論0 收藏0
  • vue-cli3.0 資源加載的優(yōu)化方案

    摘要:更新今天反復(fù)試了,不用區(qū)分測(cè)試環(huán)境還是生產(chǎn)環(huán)境,統(tǒng)一都用就可以了背景之前自己搭建了一個(gè)的后臺(tái)項(xiàng)目,坑很多,其中一個(gè)就是資源加載的方案,由于是后臺(tái)項(xiàng)目,之前一直沒放在心上,看到一些資源優(yōu)化方案后,覺得有必要弄一下。 20180829 更新 今天反復(fù)試了,不用區(qū)分 測(cè)試環(huán)境還是 生產(chǎn)環(huán)境,統(tǒng)一都用 cdn 就可以了 背景 之前自己搭建了一個(gè) vue + tp5.1 的后臺(tái)項(xiàng)目(https:...

    yzzz 評(píng)論0 收藏0
  • element 上傳組件 el-upload 的經(jīng)驗(yàn)總結(jié)

    摘要:正文上傳圖片到七牛云這個(gè)需要前后端的配合才能實(shí)現(xiàn),這里是官方的參考鏈接。參考鏈接組件的怎么獲取進(jìn)度值谷歌找到的其一谷歌找到的其二完 前言 最近在做后臺(tái)管理項(xiàng)目,采用的 vue-element-admin ,上傳圖片是一個(gè)很常用的功能,也遇到了很多問題,剛好趁此機(jī)會(huì)做一些總結(jié)。 初步總結(jié)下會(huì)提到的問題,目錄如下: el-upload 自定義上傳方法 圖片上傳到七牛云 圖片壓縮后再上傳(...

    Neilyo 評(píng)論0 收藏0
  • 步步向前之Element-UI

    摘要:無效方案根據(jù)交易所小時(shí)成交量占比和實(shí)時(shí)價(jià)格加權(quán)計(jì)算得到渲染結(jié)果是一個(gè)包含了文字,同時(shí)有名為的,并無小圖標(biāo),后邊中括號(hào)結(jié)構(gòu)里只能有一個(gè)有待考證。 Table 固定表頭 只要在el-table元素中定義了height屬性,即可實(shí)現(xiàn)固定表頭的表格,而不需要額外的代碼。例如: ... 這里文檔只給了一種固定高度250px的解決方案,實(shí)際應(yīng)用大多數(shù)是需要自適應(yīng)占滿父元素,超出滾動(dòng)固定表頭的...

    Imfan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<