el-upload 组件上传文件(查询,上传,删除,下载功能)

1.html

el-upload中的属性:

 <el-upload
        ref="upload"  
        class="upload-demo"  // element-ui自带的样式
        :headers="headerOdj" // 文件上传的头,带token(重要,不然传输大文件会断掉)
        :action="adminUrl" // 上传的服务器地址
        :before-upload="beforeFileUpload" // 文件上传前(判断文件类型,大小)
        :on-success="successFileUpload" // 文件上传成功(上传接口写这,回显的数据处理)
        :on-remove="handleRemove" // 文件移除时候(删除文件接口写这)
        :on-preview="handleFile" // 点击文件时候(文件点击下载)
        :file-list="fileList" // 页面文件回显的list
        drag // 支持拖拽上传
      >

    <!-- pc文件上传对话框 -->
    <el-dialog
      title="文件上传"
      :visible.sync="pcUpload"
      width="400px"
      append-to-body
      :before-close="pcUploadClose"
    >
      <el-upload
        ref="upload" 
        class="upload-demo"
        :headers="headerOdj"
        :action="adminUrl"
        :before-upload="beforeFileUpload"
        :on-success="successFileUpload"
        :on-remove="handleRemove"
        :on-preview="handleFile"
        :file-list="fileList"
        drag
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
      </el-upload>

      <div slot="footer" class="dialog-footer">
        <el-button @click="pcUploadClose">取 消</el-button>
      </div>
    </el-dialog>

2.接口引入

import {
  getNoticeinfo, // 获取公告详情
  UploadFile, // 上传文件
  QueryUploadFile, // 查询文件
} from "@/api/system/noticeinfo";
import { delNoticeinfofile } from "@/api/system/noticeinfofile"; // 删除文件接口
import { getToken } from "@/utils/auth"; // ruoyi中获取token封装好的

3.data中的数据

 adminUrl: this.$global.fileUrl,  // this.$global.fileUrl是自己定义的全局服务器地址,直接写服务器地址也行

 headerOdj  中的Authorization:token值   ruoyi有封装好的,一般在created中自己先获取

data() {
    return {
      pcUpload: false, // pc端上传框弹窗显示
      // 页面回显的文件列表,需要有以下格式数据类型
      fileList: [
        // {
        //   name: "food.jpeg",
        //   url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
        // },
        // {
        //   name: "food2.jpeg",
        //   url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
        // },
      ],
      adminUrl: this.$global.fileUrl, //图片上传后台地址
      headerOdj: { Authorization: getToken() }, // 文件上传带的头,需要token,不然大文件上传会断
    };
  },

4.methods

/* pc端文件上传时候------------------------------------- */
    // 上传文件前
    beforeFileUpload(file) {
      // console.log("上传前file====>", file);
      const fileName = file.name;
      for (let i = 0; i < this.fileList.length; i++) {
        // 如果上传文件名称 已上传的文件名存在提示
        if (fileName == this.fileList[i].name) {
          this.$message.error("文件名已存在,请改名或删除已有文件");
          return false;
        }
      }
      const isLt50M = file.size / 1024 / 1024 < 50;
      if (!isLt50M) {
        this.$message.error("上传头像图片大小不能超过 50MB!");
      }
      return isLt50M;
    },
    // 文件上传成功时候
    successFileUpload(response, file, fileList) {
      if (file != null) {
        // 接口上传 需要formData 文件类型
        let formData = new FormData();
        formData.append("file", file.raw);
        formData.append("noticeId", this.id);
        formData.append("userId", 1);
        UploadFile(formData).then((res) => {
          // console.log("####", res);
          if (res.code == 200) {
            // 把上传返回的信息添加到fileList文件
            const obj = {};
            obj.id = res.data.id;
            obj.name = res.data.zbFileName;
            obj.url = this.$global.fileUrl + res.data.zbFileUrl;
            this.fileList.push(obj);
            console.log("上传成功后的fileList", this.fileList);
            this.$modal.msgSuccess("上传成功");
          }
        });
      }
    },
    // 文件上传--移除
    handleRemove(file, fileList) {
      // console.log("删除file===>", file);
      const name = file.name;
      const id = file.id;
      delNoticeinfofile(id).then((res) => {
        // console.log(res);
        if (res.code == 200) {
          this.$modal.msgSuccess("删除成功");
        }
      });
    },
    // (下载文件)点击文件列表中已上传的文件时的钩子
    handleFile(file) {
      // console.log("点击文件=>", file);
      const url = file.url;
      const link = document.createElement("a");
      link.href = url;
      link.download = file.name; // 可选:设置下载文件的名称
      link.target = "_blank"; // 可选:设置下载文件的名称
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    },
    /* pc端文件上传处理------------------------------------- */
    /* pc端上传按钮 */
    pcUploadbtn() {
      // 查询文件
      const formData = new FormData();
      formData.append("noticeId", this.id);
      formData.append("userId", 1);
      QueryUploadFile(formData).then((res) => {
        // console.log("查询的文件===>", res);
        if (res.code == 200) {
          if (res.data.length == 0) {
            // 文件为空的情况
          } else {
            // 文件不为空的的时候处理
            for (let i = 0; i < res.data.length; i++) {
              const obj = {};
              obj.id = res.data[i].id;
              obj.name = res.data[i].zbFileName;
              obj.url = this.$global.fileUrl + res.data[i].zbFileUrl;
              this.fileList.push(obj);
            }
            console.log("###处理后的文件", this.fileList);
          }
        }
      });
      this.pcUpload = true;
    },
    /* 上传窗口关闭 */
    pcUploadClose() {
      this.pcUpload = false;
      this.fileList = []; // 弹窗关闭时,文件置空,不然显示已有文件的时候会动画会跳动
    },

css样式

/* 控制整个上传文件列表的高度和滚动条 */
::v-deep .el-upload-list {
  height: 200px; /* 设置你想要的高度 */
  overflow-y: auto; /* 添加垂直滚动条 */
}
/* 去掉文件跳动动画 */
::v-deep .el-upload-list__item {
  transition: none !important;
}

补充:

1.无token情况下

 :headers="headerOdj"可以不用(原来添加这个是为了怕大文件传输不了)

adminUrl 要添加详细的图片上传接口地址(黄色框起来的)

2.如果要自定义上传样式,不要element-ui file文件样式

css中设置: height: 0px; /* 设置你想要的高度,0 不显示 */

/* 控制整个上传文件列表的高度和滚动条 */
::v-deep .el-upload-list {
  height: 0px; /* 设置你想要的高度,0 不显示 */
  overflow-y: auto; /* 添加垂直滚动条 */
}
/* 去掉文件跳动动画 */
::v-deep .el-upload-list__item {
  transition: none !important;
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-upload组件可以用于上传删除文件。想要删除文件,可以使用before-remove钩子函数,该函数在删除文件之前触发。它接受上传的文件和文件列表作为参数,如果返回false,将停止删除,不会执行on-remove事件。 另外,el-upload组件中的上传成功事件on-success、改变事件on-change和删除事件on-remove都可以使用相同的方法。为了确定刚刚上传的文件属于哪个组件,可以在组件中使用标识来区分不同的文件。 总结来说,el-upload组件可以通过before-remove钩子来删除文件,同时可以使用标识来区分不同的文件组件。这样就可以实现上传删除文件的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [el-upload组件说明汇总,实现上传、点击下载删除功能等](https://blog.csdn.net/whwhhhh/article/details/122928203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [el-upload上传组件的动态添加;el-upload动态上传文件el-upload区分文件是哪个组件上传的。](https://blog.csdn.net/i_am_a_div/article/details/125545564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【JavaScript源代码】vue+el-upload实现多文件动态上传.docx](https://download.csdn.net/download/mmoo_python/72280652)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值