当前位置: 首页 > news >正文

vue实现文件上传,前后端

前端封装el-upload组件,父组件传值dialogVisible(用于显示el-dialog),子组件接收,并且关闭的时候返回一个值(用于隐藏el-dialog),最多上传五个文件,文件格式为.jpg\pdf\png

<template><div><el-dialog  width="30%"  :visible.sync="dialogShow" append-to-body @close='handleCancle' title="上传发票" class="uploadDialog"><!-- list-type="picture" --><el-uploadref="upload":auto-upload="false":http-request="uploadFile":on-change="changeFileLength":limit="5":on-exceed="handleExceed"action=""accept=".pdf,.jpg,.png" multiple><i class="el-icon-upload"></i><div class="el-upload__text">点击上传文件</div></el-upload><!-- 上传时点击的按钮 --><el-button @click="upload" type="success">上传文件</el-button></el-dialog></div>
</template>
<script>
import {  upload } from "@/api/invoice/invoiceManagement";export default {name: "uploadCT",props:{dialogVisible:{type:Boolean,default:false,require:true,}},watch: {dialogVisible: {handler(val) {this.dialogShow = val},deep: true, // 深度监听immediate: true, // 初次监听即执行  },},data(){return{// 上传文件的列表uploadFiles: [],// 上传文件的个数filesLength: 0,// 上传需要附带的信息info:{id:"",name:"",},//显示dialogShow:this.dialogVisible,}},methods:{//超出限制提示handleExceed(files, fileList) {this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);},//关闭handleCancle(){this.uploadFiles= [];// 上传文件的个数this.filesLength= 0;this.dialogShow = false;this.$emit('closeUploadDialog',this.dialogShow);this.$refs.upload.clearFiles();},// 修改当前文件列表长度changeFileLength(file, fileList){this.filesLength = fileList.length},// 用户点击上传调用async upload(){// 触发上传 调用配置 :http-request="uploadFile"// 即触发 uploadFile函数await this.$refs.upload.submit();// 上传完成后执行的操作 ...this.$modal.msgSuccess("上传成功");},// 该函数还是会被调用多次// 每次param参数传入一个文件uploadFile(param){console.log("参数",param);// 将文件加入需要上传的文件列表this.uploadFiles.push(param.file)// 当uploadFiles长度等于用户需要上传的文件数时进行上传if (this.uploadFiles.length == this.filesLength){// 创建FormData上传let fd = new FormData()// 将全部文件添加至FormData中this.uploadFiles.forEach(file => {fd.append('file', file)})// 将附加信息添加至FormDatafd.append("id", this.info.id)fd.append("name", this.info.name)// 配置请求头const config = {headers: {"Content-Type": "multipart/form-data",}}console.log("参数",fd);// 上传文件upload(fd).then(res => {/*上传成功处理*/console.log(res);if(res.msg=='上传成功'){this.uploadFiles=[];this.filesLength = 0;this.dialogShow = false;this.$emit('closeUploadDialog',this.dialogShow);this.$refs.upload.clearFiles();}}).catch(err => {/*报错处理*/});}}}
}
</script>

后端接收

 @PostMapping("/upload")public AjaxResult upload(@RequestParam(value = "file") MultipartFile[] file){try {String localPath = "";//1.1获取当前日期,当做本地磁盘的目录Date nowDate = DateUtils.getNowDate();String format = new SimpleDateFormat("YYYYMMDD").format(nowDate);String localPathPrefix = "C:\\"+format;for(MultipartFile f:file){// 获取文件名String fileName = f.getOriginalFilename();// 获取文件后缀String prefix = fileName.substring(fileName.lastIndexOf("."));// 保存文件到本地磁盘localPath = localPathPrefix+"\\"+fileName;File localFile = new File(localPath);if (!localFile.getParentFile().exists()) {localFile.getParentFile().mkdirs();}//写入到本地磁盘f.transferTo(localFile);// 获取文件在本地磁盘上的路径String filePath = localFile.getAbsolutePath();log.info("文件名称:"+fileName+"已经存入本地磁盘,全路径为:"+filePath);//上传到文件服务器,自己掉接口//上传完成后,删除本地临时磁盘文件if (localFile.delete()) {log.info(localFile.getName() + "已经删除");} else {log.info("文件删除失败");}}//删除本次磁盘的日期目录File file1 = new File(localPathPrefix);if (file1.delete()) {log.info(file1.getName() + "已经删除");} else {log.info("文件删除失败");}}catch (Exception e){System.out.println(e);return error("上传失败");}return success("上传成功");}

效果展示

 

 

相关文章:

vue实现文件上传,前后端

前端封装el-upload组件&#xff0c;父组件传值dialogVisible&#xff08;用于显示el-dialog&#xff09;&#xff0c;子组件接收&#xff0c;并且关闭的时候返回一个值&#xff08;用于隐藏el-dialog&#xff09;,最多上传五个文件&#xff0c;文件格式为.jpg\pdf\png <tem…...

OJ练习第151题——克隆图

克隆图 力扣链接&#xff1a;133. 克隆图 题目描述 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 示例 分析 对于一张图而言&#xff0c;它的深拷贝即构建一张与原图结构&#xff0c;值均一样的图&#xff0c;但是…...

keepalived+lvs实现高可用

目录 环境 1.配置real-server服务器 2.配置keepalived和lvs 3.测试&#xff1a; 概述 keepalivedlvs实现高可用&#xff1a; lvs可以监控后端服务器&#xff0c;当服务器宕机之后可以对其进行故障切换。 keepalived是对VIP进行检测&#xff0c;当某一个主机的vip错误&…...

【Let‘s make it big】英语合集61~70

61(82) top-of-range it doesn’t get any better than this There seems to be a problem with my account What seems to be the problem withdraw money from my saving account charged an overdraft fee we don’t give loans to customers whose accounts are overdrawn…...

python实现图像的二分类

要实现图像的二分类&#xff0c;可以使用深度学习中的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;模型。下面是一个使用Keras库实现的简单CNN模型示例&#xff1a; from keras.models import Sequential from keras.layers import Conv2D, MaxPoo…...

8.深浅拷贝和异常处理

开发中我们经常需要复制一个对象。如果直接用赋值会有下面问题: 8.1 浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝&#xff1a;拷贝的是地址 常见方法: 1.拷贝对象&#xff1a;Object.assgin() / 展开运算符{…obj} 拷贝对象 2.拷贝数组&#xff1a;Array.prototype.con…...

Element Plus el-table 数据为空时自定义内容【默认为 No Data】

1. 通过 Table 属性设置 <div class"el-plus-table"><el-table empty-text"暂无数据" :data"tableData" style"width: 100%"><el-table-column prop"date" label"Date" width"180" /&g…...

使用nginx和frp实现高效内网穿透:简单配置,畅通无阻

I. 引言 A. 介绍内网穿透的概念和用途 内网穿透是一种网络技术&#xff0c;它允许用户通过公共网络访问位于私有网络&#xff08;内网&#xff09;中的资源和服务。在传统的网络环境中&#xff0c;内网通常是由路由器或防火墙保护的&#xff0c;无法直接从外部网络访问内部资…...

Python土力学与基础工程计算.PDF-螺旋板载荷试验

python 求解代码如下&#xff1a; 1. import numpy as np 2. 3. # 已知参数 4. p_a 100 # 标准压力&#xff0c; kPa 5. p np.array([25, 50, 100, 200) # 荷载&#xff0c; kPa 6. s np.array([2.88, 5.28, 9.50, 15.00) / 10 # 沉降量&#xff0c; cm 7. D 10 # 螺旋板直…...

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今&#xff0c;企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下&#xff0c;数字化转型不仅是企业生存的必然选择&#xff0c;也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…...

顺序表(数据结构)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 顺序表目录 1.线性表 2.顺序表 概念及结构 静态顺序表&#xff1a;使用定长数组存储元素。 动态顺序表&#xff1a;使用动态开辟的数组存储。 接口实现 1.线性表 线性表 &#xff08; linear list &#xff09; 是…...

stable_diffusion_webui docker环境配置

1.新建docker环境 docker run -tid --name e_commerce_sd --net host --runtimenvidia nvidia/cuda:11.1-cudnn8-devel-cent os7-ssh /bin/bashdocker exec -ti e_commerce_sd /bin/bash echo expor…...

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具&#xff08;了解&#xff09;2. 【经典面试题】GET和POST的区别&#xff1a;3. URL中不是也有这个服务器主机的IP和端口吗&#xff0c;为啥还要搞个Host&#xff1f;4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程&#xff08;经典面试题&#xff09;7. H…...

批量爬虫采集完成任务

批量爬虫采集是现代数据获取的重要手段&#xff0c;然而如何高效完成这项任务却是让许多程序员头疼的问题。本文将分享一些实际操作价值高的方法&#xff0c;帮助你提高批量爬虫采集的效率和专业度。 目标明确&#xff0c;任务合理划分&#xff1a; 在开始批量爬虫采集前&…...

intelij idea 2023 创建java web项目

1.点击New Project 2.创建项目名称为helloweb &#xff0c;jdk版本这里使用8&#xff0c;更高版本也不影响工程创建 点击create 3.新建的工程是空的&#xff0c;点击File-> Project Structure 4.点击Modules 5.点击加号&#xff0c;然后键盘输入web可以搜索到web模块&…...

【论文笔记】基于指令回译的语言模型自对齐-MetaAI

MetaAI最近发布的Humpback&#xff0c;论文链接&#xff1a;https://arxiv.org/abs/2308.06259 解决什么问题&#xff1f; 大量高质量的指令微调数据集的生成。 思路 在这项工作中&#xff0c;我们通过开发迭代自训练算法来利用大量未标记的数据来创建高质量的指令调优数据集…...

MySQL和MariaDB的版本对应关系

MariaDB 10.0和MariaDB 10.1可以作为MySQL 5.6的有限替代。 MariaDB 10.2可以作为MySQL 5.7的有限替代。 一&#xff0c;目前最新版本 MariaDB 10.5.8 10.4.17 10.3.27 10.2.36 MySQL 8.0.23 二&#xff0c;oracle MySQL版本和MariaDB版本对应表: MariaDB版本 …...

Python数据的输入与输出

编辑&#xff1a;2023-08-14 17:00 Python是一种高级编程语言&#xff0c;它支持多种输入输出方式&#xff0c;包括标准输入输出、文件输入输出等。本文将从以下几个方面详细阐述Python数据的输入与输出。 一、标准输入输出 Python中的标准输入和标准输出指的是控制台输入输…...

生成国密密钥对

在线生成国密密钥对 生成的密钥对要妥善保管&#xff0c;丢失是无法找回的。...

ASR(自动语音识别)任务中的LLM(大语言模型)

一、LLM大语言模型的特点 二、大语言模型在ASR任务中的应用 浅度融合 浅层融合指的是LLM本身并没有和音频信息进行直接计算。其仅对ASR模型输出的文本结果进行重打分或者质量评估。 深度融合 LLM与ASR模型进行深度结合&#xff0c;统一语音和文本的编码空间或者直接利用ASR…...

搞懂USB2.0 Reset:从Hub发信号到设备握手的完整流程拆解

USB2.0 Reset全流程解析&#xff1a;从信号触发到高速模式切换的工程实践 当你的USB设备频繁掉线或枚举失败时&#xff0c;逻辑分析仪上那些跳变的波形到底在诉说什么&#xff1f;作为嵌入式开发者&#xff0c;我们常常需要像侦探一样解读这些电子信号背后的协议语言。本文将带…...

QT ToolButton的5个隐藏技巧与3个常见坑,新手避雷指南(基于Qt 6.5)

QT ToolButton的5个隐藏技巧与3个常见坑&#xff0c;新手避雷指南&#xff08;基于Qt 6.5&#xff09; 在模仿现代软件工具栏设计时&#xff0c;QT的ToolButton组件往往是实现专业级交互的关键。但许多开发者第一次使用时会发现&#xff0c;这个看似简单的按钮藏着不少"陷…...

硬件工程师避坑指南:从原理到实战,搞定ESD防护设计与IEC 61000-4-2测试

硬件工程师避坑指南&#xff1a;从原理到实战&#xff0c;搞定ESD防护设计与IEC 61000-4-2测试 在北方干燥的冬季&#xff0c;脱下毛衣时噼啪作响的静电火花或许只是生活中的小插曲&#xff0c;但对于价值数百万的医疗设备或自动驾驶系统而言&#xff0c;同样的静电放电&#x…...

NotebookLM摘要质量断崖式下滑?揭秘92%用户忽略的3个语义锚点校准技巧

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM摘要质量断崖式下滑的真相溯源 近期大量用户反馈 NotebookLM 生成的摘要出现关键信息遗漏、逻辑断裂与事实扭曲等现象&#xff0c;部分案例中摘要准确率较 2023 年底下降超 40%。这一退化并非…...

NotebookLM赋能社科研究(从文献综述到理论建模的闭环实践)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM赋能社科研究&#xff08;从文献综述到理论建模的闭环实践&#xff09; NotebookLM 是 Google 推出的面向研究者的 AI 原生笔记工具&#xff0c;其核心能力在于对用户上传的 PDF、TXT 等本地…...

LSPatch:无需Root的Android应用模块化终极指南

LSPatch&#xff1a;无需Root的Android应用模块化终极指南 【免费下载链接】LSPatch LSPatch: A non-root Xposed framework extending from LSPosed 项目地址: https://gitcode.com/gh_mirrors/ls/LSPatch 你是否曾经羡慕iOS的越狱插件&#xff0c;却因Android设备未ro…...

为什么龙华选了3DGS?详解高斯泼溅、倾斜摄影、点云在治理场景中的优劣

一、行业核心技术科普&#xff1a;三种主流三维建模技术的原理与定位在城市治理与数字孪生领域&#xff0c;倾斜摄影、点云和3D高斯泼溅&#xff08;3DGS&#xff09;是三种主流的三维建模技术&#xff0c;它们各有侧重&#xff0c;互为补充。倾斜摄影&#xff1a;大范围实景的…...

Awesome-LLM-Apps:大语言模型应用开发实战指南与开源项目宝库

1. 项目概述&#xff1a;一个大型语言模型应用的开源宝库如果你最近在折腾大语言模型&#xff0c;想找点现成的、能跑起来的应用来学习或者直接部署&#xff0c;那你大概率在GitHub上见过这个项目。awesome-llm-apps&#xff0c; 一个由开发者Shubham Saboo维护的仓库&#xff…...

用Python从零复现混沌博弈算法(CGO):一个骰子如何玩转优化问题?

用Python从零复现混沌博弈算法&#xff08;CGO&#xff09;&#xff1a;一个骰子如何玩转优化问题&#xff1f; 混沌博弈算法&#xff08;Chaos Game Optimization, CGO&#xff09;是近年来兴起的一种新型智能优化算法&#xff0c;它将混沌理论与博弈思想巧妙结合&#xff0c;…...

别再只用脚本了!用MATLAB面向对象编程重构你的科研数据处理流程(附完整Point类示例)

别再只用脚本了&#xff01;用MATLAB面向对象编程重构你的科研数据处理流程&#xff08;附完整Point类示例&#xff09; 科研数据处理中&#xff0c;你是否经常遇到这样的场景&#xff1a;同一个实验数据需要反复处理&#xff0c;每次都要复制粘贴大段脚本&#xff1b;变量命名…...