国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

yy13818512006 / 2210人閱讀

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

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

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

下面最重要的就是鉤子函數了

1、handleExceed是文件超出個數限制時的鉤子
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;
    }
    // 大小和類型驗證都通過后,給自定義的列表中添加需要的數據
    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是后端接口返回的數據,可以根據接口返回的數據做一些操作
    // 示例
    // 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);
      }
    });
  }
添加數據函數
private objAddItem(tempArr: any[], file: any) {
    const tempObj = {
      uid: file.uid, // uid用于辨別文件
      originalName: file.name, // 列表顯示的文件名
      progress: 0, // 進度條
      code: 200, // 上傳狀態
    };
    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樹上才會發請求
    // 5分鐘之后刪除(onload方法對于下載鏈接不起作用,就先摳腳一下吧)
    setTimeout(() => {
      iframe.remove();
    }, 5 * 60 * 1000);
  }
持續更新......

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99635.html

相關文章

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

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

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

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

    yzzz 評論0 收藏0
  • element 上傳組件 el-upload 的經驗總結

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

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

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

    Imfan 評論0 收藏0

發表評論

0條評論

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