成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

yy13818512006 / 2223人閱讀

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

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

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

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

1、handleExceed是文件超出個數(shù)限制時的鉤子
private handleExceed(files: any, fileList: any) {
    if (fileList.length > 20) {
      this.$message.error("最多允許上傳20個文件");
      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("請上傳正確的格式類型");
      return !isExt;
    }
    // 大小和類型驗證都通過后,給自定義的列表中添加需要的數(shù)據(jù)
    this.objAddItem(this.tempArr, file);
  }
3、handleProgress文件上傳時的鉤子,更新進度條的值
private handleProgress(event: any, file: any, fileList: any) {
    this.tempArr.forEach((element: any, index: number) => {
      if (element.uid === file.uid) {
        // 更新這個uid下的進度
        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文件上傳成功時的鉤子
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為下載地址,一般后端人員會給你返回
        // 我這邊為了做后面的下載,先寫死鏈接供測試
        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文件上傳失敗時的鉤子
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, // 進度條
      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"; // 防止影響頁面
    iframe.style.height = 0; // 防止影響頁面
    iframe.src = url;
    document.body.appendChild(iframe); // 這一行必須,iframe掛在到dom樹上才會發(fā)請求
    // 5分鐘之后刪除(onload方法對于下載鏈接不起作用,就先摳腳一下吧)
    setTimeout(() => {
      iframe.remove();
    }, 5 * 60 * 1000);
  }
持續(xù)更新......

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99635.html

相關(guān)文章

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

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

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

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

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

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

    Neilyo 評論0 收藏0
  • 步步向前之Element-UI

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

    Imfan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<