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

news2024/11/28 0:36:08

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Spring Boot实现用户认证和授权

文章目录 引言第一章 Spring Boot概述1.1 什么是Spring Boot1.2 Spring Boot的主要特性 第二章 用户认证和授权基础知识2.1 用户认证2.2 用户授权2.3 Spring Security概述 第三章 项目初始化第四章 实现用户认证和授权4.1 定义用户实体类和角色实体类4.2 创建Repository接口4.3…

昇思25天学习打卡营第4天 | 数据变换

内容介绍&#xff1a;通常情况下&#xff0c;直接加载的原始数据并不能直接送入神经网络进行训练&#xff0c;此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。所有的T…

书生·浦语大模型LagentAgentLego智能体应用搭建 第二期

文章目录 智能体概述智能体的定义智能体组成智能体范式 环境配置Lagent&#xff1a;轻量级智能体框架实战Lagent Web Demo用 Lagent 自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用AgentLego作为智能体工具使用 用 AgentLego 自定义工具 智能体概述 智能体的定义…

gbase8s获取表的serial字段下一个insert序列值

serial字段&#xff0c;有个函数可以获取到最后插入的序列值&#xff0c;但是好像只能获取到当前会话最后一次插入的序列值&#xff0c;不论是SELECT dbinfo(sqlca.sqlerrd1) FROM dual;&#xff0c;还是select dbinfo(bigserial) from dual;&#xff0c;或者select dbinfo(ser…

点击旋转箭头样式

实现效果&#xff1a; html界面&#xff0c;主要通过isdown来控制箭头是上还是下 <el-popoverplacement"bottom"trigger"click":visible-arrow"false"v-model"isdown"popper-class"user-popover"><divslot"re…

ICMAN触摸芯片——防水触摸

ICMAN触摸芯片之防水触摸触摸按键控制开关和调节挡位和切换不同模式 淋水状态下&#xff0c;触摸按键反应灵敏&#xff0c;不误触发&#xff0c; ICMAN触摸芯片稳定性与抗干扰能力强&#xff0c; 可以轻松解决家电触摸感应不灵敏和有水误触发的问题&#xff0c; 从而有效实…

如何利用AI简历工具为实习简历加分?

时间匆匆&#xff0c;我们又迎来了毕业季。大学生活丰富多彩&#xff0c;学业同样重要。毕业答辩对于每位大学生来说都是一道重要的门槛。回想起那些为了答辩准备而熬夜、焦虑的日子&#xff0c;那份努力至今难忘。 虽然答辩的准备工作可能相当繁琐&#xff0c;但幸运的是&…

数学建模系列(2/4):建模入门

目录 引言 1. 如何开始数学建模 1.1 选择和描述问题 1.2 提出基本假设 1.3 确定模型类型 2. 建模的数学基础 2.1 线性代数基础 矩阵运算 线性方程组的解法 2.2 微分方程基础 常微分方程 偏微分方程 2.3 统计与概率基础 描述性统计 概率基础 3. 模型的求解方法 …

Linux学习笔记:前言与操作系统的初识【1】

前言 为什么学习Linux 作为当下最流行的操作系统之一&#xff0c;学会如何使用和操作Linux操作系统也就是每位计算机学者的看家必备技能了。其次呢&#xff0c;本人受Linux的创始人林纳斯的影响太深了&#xff0c;觉得这个人太了不起了&#xff0c;而且人家大学里就自研开发出…

Block-Max-Maxscore(Lucene 9.10.0)

Lucene中基于论文&#xff1a;Optimizing Top-k Document Retrieval Strategies for Block-Max Indexes 实现了Block-Max-Maxscore (BMM) 算法&#xff0c;用来优化关键字之间只有OR关系&#xff0c;并且minShouldMatch < 1时的查询。比如有查询条件为&#xff1a;term1 OR …

2024/6/22 英语每日一段

France is the only country in Europe with an EPR that covers the textile industry. Critics say the policy does little for “end-of-line” countries such as Ghana because the fee paid by clothing producers is low at just €0.06 for each item, and the funds …

小米红米全机型TWRP下载刷入教程-获取root权限--支持小米14/红米K7Pro/红米Turbo3等机型

刷机注意&#xff1a; 本教程为小米红米全机型专用TWRP_Recovery合集&#xff0c;ROM乐园独家首发整理。请确保你的电脑能正确连接你的手机&#xff0c;小米红米手机需要解锁BL&#xff0c;请参照下面教程 小米MIUI澎湃OS解锁BL教程&#xff1a;小米手机官方解锁BootLoader图文…

低浓度废锡回收后的几种处理方法

低浓度废锡回收后&#xff0c;处理方法的选择对于资源的有效利用和环境保护具有重要意义。以下是几种常见的低浓度废锡回收后的处理方法&#xff0c;结合相关数字和信息进行详细介绍&#xff1a; 一、化学法回收 化学法回收是低浓度废锡回收的重要方法之一。其中&#xff0c;酸…

FlowUs AI的使用教程和使用体验

FlowUs AI 使用教程 FlowUs AI特点使其成为提升个人和团队生产力的有力工具&#xff0c;无论是在学术研究、内容创作、技术开发还是日常办公中都能发挥重要作用。现在来看看如何使用FlowUs AI吧&#xff01; 注册与登录&#xff1a;首先&#xff0c;确保您已经注册并登录FlowU…

OpenCV中的圆形标靶检测——findCirclesGrid()(三)

前面说到cv::findCirclesGrid2()内部先使用SimpleBlobDetector进行圆斑检测,然后使用CirclesGridClusterFinder算法类执行基于层次聚类的标靶检测。如下图所示,由于噪声的影响,SimpleBlobDetector检出的标靶可能包含噪声。 而CirclesGridClusterFinder算法类会执行基…

【for循环】最大跨度

【for循环】最大跨度 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int n;int max 0, min 100;cin>>n;for(int i1; i<n; i1){int a;cin>>a;if(a>max){max a;}i…

Android使用MPAndroidChart 绘制折线图

效果图&#xff1a; 1.导入依赖 1.1在项目根目录下的build.gradle文件中添加代码&#xff08;注意不是app下的build.gradle&#xff09;&#xff1a; maven { url https://jitpack.io } 1.2在app下的build.gradle中的依赖下添加&#xff1a; implementation com.github.PhilJa…

邀请函 | 人大金仓邀您相聚第十三届中国国际国防电子展览会

盛夏六月 备受瞩目的 第十三届中国国际国防电子展览会 将于6月26日至28日 在北京国家会议中心盛大举办 作为数据库领域国家队 人大金仓 将携系列行业解决方案 和创新实践成果亮相 期待您莅临指导 ↓↓↓↓↓↓ CIDEX 2024 中国国际国防电子展览会&#xff08;简称CIDEX&#xf…

信息安全基础知识(完整)

信息安全基础知识 安全策略表达模型是一种对安全需求与安全策略的抽象概念表达&#xff0c;一般分为自主访问控制模型&#xff08;HRU&#xff09;和强制访问控制模型&#xff08;BLP、Biba&#xff09;IDS基本原理是通过分析网络行为&#xff08;访问方式、访问量、与历史访问…

力扣每日一题 6/19 排序+动态规划

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2713.矩阵中严格递增的单元格数【困难】 题目&#xff1a; 给你一个下标从…