elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

Upload 上传组件的使用
  • 官方文档链接
  • 使用el-upload组件上传文件
    • 具体参数说明,如何实现上传、下载、删除等功能
    • 获取文件列表进行file-list格式匹配
    • 代码
  • 文件展示列表自定义为表格展示
    • 使用的具体参数说明
    • 文件大小展示问题(KB/MB)
    • 文件下载
    • 代码
  • 上传文件大小与文件类型校验

官方文档链接

官方文档 https://element.eleme.cn/#/zh-CN/component/upload

使用el-upload组件上传文件

在这里插入图片描述

具体参数说明,如何实现上传、下载、删除等功能

  • action:文件上传地址,我的项目里已经封装好了请求。使用的时候需要依据项目填写。

  • show-file-list: 是否显示已上传文件列表。

  • headers:设置上传的请求头部。我的项目需要传token。

  • on-preview:点击文件列表中已上传的文件时的钩子。
    可以在这个这个回调方法里写下载功能部分代码,实现点击文件下载功能。

  • on-remove:文件列表移除文件时的钩子。
    在文件列表回显时,使用数组fileData记录id列,执行删除回调时,匹配id,因为删除回调方法返回的file中不记录id,只记录url,可通过url相同返回id,再调用删除接口。

  • on-successfunction(response, file, fileList) 文件上传成功时的钩子。
    如果不设置auto-upload:false ,则选取文件后立即进行上传,成功回调后使用返回的参数调用接口,完成文件上传。

获取文件列表进行file-list格式匹配

  • file-list :上传的文件列表, 例如: [{name: ‘food.jpg’, url: ‘https://xxx.cdn.com/xxx.jpg’}]
  • 列表回显时,需要将返回列表对应参数赋值给file-list对应的数组fileData 。

代码

<template>
  <basic-container>
    <el-form :model="dataForm" ref="dataForm" label-width="140px">
      <el-form-item>
        <el-upload class="upload-demo" 
          ref="upload" 
          :headers="headers" 
          action="/admin/sys-file/upload"
          :on-preview="handlePreview" 
          :on-remove="handleRemove" 
          :on-success="handleAvatarSuccess" 
          :file-list="fileData">
          <el-button slot="trigger" size="small" type="primary">上传文件</el-button>
        </el-upload>
      </el-form-item>
    </el-form>
  </basic-container>
</template>

<script>
import {
getObj,
addObj,
putObj,
fetchList,
getnoticeId,
delObj
} from ‘@/api/policy/noticeattachment’
import store from ‘@/store’
import { mapState} from ‘vuex’
export default {
data() {
return {
dataForm: {
id: 0,
noticeId: ‘’,
attachName: ‘’,
attachUrl: ‘’,
},
dataList: [],
fileData: [],
headers: {
‘Authorization’: 'Bearer ' + store.getters.access_token,
},
}
},
methods: {
init(id) {
// console.log(id)
this.dataForm.noticeId = id
//数组每次需要清空
this.fileData.splice(0, this.fileData.length);
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…refs[‘dataForm’].resetFields();
if (this.dataForm.noticeId) {
getnoticeId(this.dataForm.noticeId).then(response => {
this.dataList = response.data.data;
this.dataList.forEach(list => {
this.fileData.push({
name: list.attachName,
url: list.attachUrl,
id: list.id //删除时使用
})
})
});
}
});
},
//移除回调
handleRemove(file, fileList) {
let resultArr = this.fileData.filter((item) => {
return item.url === file.url
});
// console.log(resultArr[0])
this.dataForm.id = resultArr[0].id
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…message.success(‘删除成功’)
})
},
// 表单提交
dataFormSubmit() {
this.KaTeX parse error: Expected 'EOF', got '&' at position 369: …ken operator">=&̲gt;</span> <spa…message.success(‘修改成功’)
});
} else {
addObj(this.dataForm).then(data => {
this.$message.success(‘添加成功’)
})
}
}
})
}
}
}
</script>

文件展示列表自定义为表格展示

在这里插入图片描述

使用的具体参数说明

  • show-file-list: 是否显示已上传文件列表。
    展示自定义表格样式需要设置show-file-list=“false”
  • on-successfunction(response, file, fileList) 文件上传成功时的钩子。
    如果不设置auto-upload:false ,则选取文件后立即进行上传,成功回调后使用返回的参数调用接口,完成文件上传。

文件大小展示问题(KB/MB)

  • 上传文件时size默认传file返回的size大小(默认为1字节),在表格展示时进行判断,如果大于1MB展示单位为MB,小于1MB展示单位KB。
  • MB:size / 1024 / 1024
  • KB:size / 1024
    (既然提到字节,可能有的人不熟悉字节,这里顺便记录一下字节转换关系)
    字节也叫Byte,是计算机数据的基本存储单位。
    8bit(位)=1Byte(字节)
    1024Byte(字节)=1KB
    1024KB=1MB
    1024MB=1GB
    1024GB=1TB
    其中:K是千 M是兆 G是吉咖 T是太拉。

文件下载

  • 点击下载按钮,实现下载此文件。使用a标签,传入对应文件name和url。具体代码下面记录。

代码

<template>
  <basic-container>
        <el-upload class="upload-demo"
          ref="upload"
          :headers="headers"
          action="/admin/sys-file/upload"
          :on-success="handleAvatarSuccess"
          :show-file-list="false">
          <el-button slot="trigger" size="small" type="primary">上传文件</el-button>
        </el-upload>
        <el-table class="down" :data="dataList" border stripe style="width: 100%;margin-top: 20px;">
            <el-table-column prop="attachName" label="文件名称"></el-table-column>
            <el-table-column prop="attachSize" label="文件大小">
              <template slot-scope="scope">
                  <span v-if="scope.row.attachSize / 1024 / 1024 < 1">{{(scope.row.attachSize / 1024).toFixed(2) + 'KB'}}</span>
                  <span v-else>{{(scope.row.attachSize / 1024 / 1024).toFixed(2) + 'MB'}}</span>
              </template>
            </el-table-column>
            <el-table-column prop="createTime" label="上传时间"></el-table-column>
            <el-table-column width="150px" label="操作">
                <template slot-scope="scope">
                    <el-button size="small" type="text">
                        <a @click="downloadFile(scope.row.attachName,scope.row.attachUrl)">下载</a>
                    </el-button>
                    <el-button size="small" type="text" @click="deleteHandle(scope.row.id)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-form>
  </basic-container>
</template>

<script>
import {
getObj,
addObj,
putObj,
fetchList,
getnoticeId,
delObj
} from ‘@/api/policy/noticeattachment’
import store from ‘@/store’
import { mapState} from ‘vuex’
export default {
data() {
return {
dataForm: {
id: 0,
noticeId: ‘’,
attachName: ‘’,
attachUrl: ‘’,
attachSize: ‘’,
},
dataList: [],
headers: {
‘Authorization’: 'Bearer ' + store.getters.access_token,
},
}
},
methods: {
init(id) {
this.dataForm.noticeId = id
this.KaTeX parse error: Expected 'EOF', got '&' at position 167: …ken operator">=&̲gt;</span> <spa…confirm(‘是否确认删除该附件’, ‘提示’, {
confirmButtonText: ‘确定’,
cancelButtonText: ‘取消’,
type: ‘warning’
}).then(function () {
return delObj(id)
}).then(data => {
this.KaTeX parse error: Expected 'EOF', got '}' at position 469: …n punctuation">}̲</span><span cl…message.success(‘添加成功’)
this.getDataList()
})
}
}
}
</script>
<style lang=“scss” scoped=“scoped”>
.down >>> a {
color: #409EFF;
}
</style>

上传文件大小与文件类型校验

  1. 可以在beforeUpload方法中进行过滤。
  2. 使用accept参数

我自己的项目里暂时没有限制,后续有需求的话会进行更新。这里不做过多概述。
下面po官网代码:

<el-upload
  class="avatar-uploader"
  action="https://jsonplaceholder.typicode.com/posts/"
  :show-file-list="false"
  :on-success="handleAvatarSuccess"
  :before-upload="beforeAvatarUpload">
  <img v-if="imageUrl" :src="imageUrl" class="avatar">
  <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

<script>
export default {
data() {
return {
imageUrl: ‘’
};
},
methods: {
handleAvatarSuccess(res, file) {
this.imageUrl = URL.createObjectURL(file.raw);
},
beforeAvatarUpload(file) {
const isJPG = file.type === ‘image/jpeg’;
const isLt2M = file.size / 1024 / 1024 < 2;

    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isJPG<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
      <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'上传头像图片只能是 JPG 格式!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isLt2M<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
      <span class="token keyword">this</span><span class="token punctuation">.</span>$message<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'上传头像图片大小不能超过 2MB!'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">return</span> isJPG <span class="token operator">&amp;&amp;</span> isLt2M<span class="token punctuation">;</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

}
</script>

差不多使用到的就这些啦,如果有新需求会继续记录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows下载并配置Kettle

注意&#xff1a;需要windows配置Java 下载 Kettle 进入官网&#xff1a;https://www.hitachivantara.com/en-us/products/pentaho-plus-platform/data-integration-analytics/pentaho-community-edition.html 下载带有Pentaho Data Integration (Base Install)的文件&#…

智能工厂能耗监测系统

智能工厂能耗监测系统是一种用于监测和管理智能工厂内能耗的系统。它通过实时收集和分析能耗数据&#xff0c;帮助工厂管理者实现能源节约、提高能源使用效率和降低运营成本。本文将详细介绍智能工厂能耗监测系统的原理、组成、优势和应用。 一、系统原理 智能工厂能耗监测系…

AWS 亚马逊云服务专题学习

目录 1. 学习大纲2. 学习地址3. 系列博客4. AWS 初识 1. 学习大纲 AWS 基础知识&#xff1a;IAM、EC2、负载均衡、Auto Scaling、EBS、EFS、Route 53、RDS、ElastiCache、S3、CloudFrontAWS CLI&#xff1a;CLI 设置、在 EC2 上的使用、最佳实践、SDK、高级使用深度数据库比较…

文件名修改方法:批量重命名文件,并将扩展字母统一转换为大写

在日常生活和工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;有时候需要对这些文件进行重命名&#xff0c;或者将它们的扩展名统一转换为大写。虽然这个过程看似简单&#xff0c;但实际上需要一定的技巧和注意事项。本文讲解云炫文件管理器如何批量重命名文件&#…

[C#]winform部署openvino官方提供的人脸检测模型

【官方框架地址】 https://github.com/sdcb/OpenVINO.NET 【框架介绍】 OpenVINO&#xff08;Open Visual Inference & Neural Network Optimization&#xff09;是一个由Intel推出的&#xff0c;针对计算机视觉和机器学习任务的开源工具套件。通过优化神经网络&#xff…

02 MyBatisPlus核心功能之基于Mapper接口/Service接口实现CRUD+分页查询

项目结构&#xff1a; 1.1 Insert方法 // 插入一条记录 // T 就是要插入的实体对象 // 默认主键生成策略为雪花算法&#xff08;后面讲解&#xff09; //返回值是影响条数 int insert(T entity);1.2 Delete方法 // 根据 entity 条件&#xff0c;删除记录 int delete(Param(…

一.MySQL的数据目录

MySQL数据目录 1.MySQL8的主要目录结构1.1数据库文件存放路径1.2相关命令目录1.3配置文件目录 2.数据库和文件系统关系2.1查看默认数据库2.2数据库在文件系统中的表示2.3表在文件系统中的表示2.3.1InnoDB存储引擎模式2.3.2MyISAM存储引擎模式 2.4小结 MySQL自带数据库 数据库含…

8.2摆动序列(LC376-M)

算法&#xff1a; 其实动态规划和贪心算法都能做 但是动态规划的时间复杂度是O(n^2) 贪心算法的时间复杂度是O(n) 所以学习贪心算法 到底为什么用贪心&#xff1f;&#xff08;分析局部最优和全局最优&#xff09; 局部最优&#xff1a;删除单调坡度上的节点&#xff08;不…

GZ036 区块链技术应用赛项赛题第3套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;3卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 新能源作为新兴领域&#xff0c;产业呈现碎片化与复杂化的特性&#xff0c;逐渐出现管理困难、供应链金融、可信监管与数…

An Association-Based Fusion Method for Multi-Modal Classification

F ∈ { C o n c a t ; A d d } \in\{Concat;Add\} ∈{Concat;Add} 辅助信息 作者未提供代码

【算法分析与设计】H指数

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程 ⛺️稳中求进&#xff0c;晒太阳 题目 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维…

人工智能 | 自然语言处理的发展历程

github&#xff1a;https://github.com/MichaelBeechan CSDN&#xff1a;https://blog.csdn.net/u011344545 自然语言处理的发展 方向一&#xff1a;技术进步1. 基于规则的语法&#xff08;1950-1990&#xff09;2. 统计语言处理&#xff08;1990-2010&#xff09;3. 基于深度学…

【PICO】【Unity】【VR】如何对打包后的PICO项目有效Debug

【背景】 PICO项目打包后再运行就看不到Console了。当然,会有各类专业的Debug工具。 有一类Debug的工具是Preview形式下展示Debug信息,但是发现Preview成功不见得打包也成功。 打包后也会有一些Debug工具,不过这里我给出自己的简单解决办法。 【解决方案】 Unity Console…

KubeSphere 核心实战之一【在kubesphere平台上部署mysql】(实操篇 1/4)

文章目录 1、登录kubesphere平台2、kubesphere部署应用分析2.1、工作负载2.2、服务2.3、应用路由2.4、任务2.5、存储与配置2.6、部署应用三要素 3、部署mysql3.1、mysql容器启动实例3.2、mysql部署分析3.3、创建mysql的配置3.4、创建mysql的数据卷pvc3.5、创建mysql工作负载3.6…

视频监控需求记录

记录一下最近要做的需求&#xff0c;我个人任务还是稍微比较复杂的 需求&#xff1a;需要实现一个视频实时监控、视频回放、视频设备管理&#xff0c;以上都是与组织架构有关 大概的界面长这个样子 听着需求好像很简单&#xff0c;但是~我们需要在一个界面上显示两个厂商的视…

1.C语言——基础知识

C语言基础知识 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…

C#使用Graphics绘图通过加载纹理底图的方式绘制纹理效果

纹理图片 加载效果如下图&#xff1a; 在扇形上把纹理图片作为底&#xff0c;渲染到绘制的图像中。 图形渲染中&#xff0c;纹理可以包括各种图像&#xff0c;如照片、图标、图案等。这些图像被映射到三维模型的表面&#xff0c;使得表面看起来像是被这些图像所包裹。 主要特点…

基于SSM的图书馆管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

AIGC - 视频生成模型的相关算法进展

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135688206 视频生成技术确实是一个很有潜力的颠覆性技术领域&#xff0c;可以作为企业创新梯队的重点关注方向&#xff0c;最近发展很快&#xff…

Docker--harbor

目录 一、搭建本地私有仓库 Docker容器的重启策略如下&#xff1a; 二、Harbor 简介 2.1Harbor是什么 2.2Harbor的特性 2.3Harbor的构成 2.4架构的数据流向 三、harbor部署以及配置文件 环境准备 部署Docker-Compose服务 下载或上传Docker-Compose&#xff1a; 赋予…