Vue+Element+Springboot图片上传的实现示例
作者:java李杨勇 发布时间:2024-06-07 15:19:39
标签:Vue,Element,Springboot,图片上传
最近没事刚好联系下vue+springboot前段后分离的项目、用上了图片上传功能、记录一下。
前端待提交的表单部分代码
<el-form-item label="封面图片">
<el-upload v-model="dataForm.title"
class="avatar-uploader"
:limit="1"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
multiple
:http-request="uploadFile"
:on-remove="handleRemove"
:on-change='changeUpload'
:file-list="images">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
el-upload里面的元素解释:
on-preview:点击文件列表中已上传的文件时的事件
on-remove:删除文件时候调用的方法
on-change:文件状态改变时的事件,添加文件、上传成功和上传失败时都会被调用
file-list:上传的文件列表或者默认回显的数据展示渲染
retrun和data
return {
images: [{name: 'food.jpg', url: 'https://img-blog.csdnimg.cn/20210329194832973.png'}],
imageUrl: '',
fileList: [], // 文件上传数据(多文件合一)
dialogImageUrl: '',
dialogVisible: false,
options: [],
content: '',
editorOption: {},
visible: false,
dataForm: {
id: 0,
title: '',
content: '',
bz: ''
},
tempKey: -666666 // 临时key, 用于解决tree半选中状态项不能传给后台接口问题. # 待优化
}
预览图片和上传图片以及删除图片
changeUpload: function(file, fileList) {//预览图片
this.fileList = fileList;
},
uploadFile(file){
},
handleRemove(file, fileList) {
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
这里我是用fomrData对象进行提交的、因为只需要上传一张单张封面图片、还有添加其他的一些表单内容进去
// 表单提交
dataFormSubmit () {
const form = new FormData()// FormData 对象
form.append('file', this.fileList);
form.append('title', this.dataForm.title);
form.append('content', this.$refs.text.value);
this.$refs['dataForm'].validate((valid) => {
if (valid) {
this.$http({
url: this.$http.adornUrl(`/sys/inform/${!this.dataForm.id ? 'save' : 'update'}`),
method: 'post',
data: form
}).then(({data}) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
} else {
this.$message.error(data.msg)
}
})
}
})
}
后台的话通过HttpServletRequest request--WebUtils
.getNativeRequest(request, MultipartHttpServletRequest.class)来获取文件请求并解析文件到服务器或本地
/**
* @author lyy
* 保存 PC-后台上传文件
*/
@RequestMapping(value = "sys/file/save", method = {RequestMethod.POST, RequestMethod.GET})
@Transactional
public R save(HttpServletRequest request) {
String classify = request.getParameter("classify");
MultipartHttpServletRequest multipartRequest = WebUtils
.getNativeRequest(request, MultipartHttpServletRequest.class);
String fileName = "";
if (multipartRequest != null) {
Iterator<String> names = multipartRequest.getFileNames();
while (names.hasNext()) {
List<MultipartFile> files = multipartRequest.getFiles(names.next());
if (files != null && files.size() > 0) {
for (MultipartFile file : files) {
fileName = file.getOriginalFilename();
String SUFFIX = FileUtil.getFileExt(fileName);
File uFile = new File();
uFile.setFileName(fileName);
uFile.setClassify(classify);
uFile.setCreateTime(new Date());
uFile.setFileType(SUFFIX);
String uuid = FileUtil.uuid();
try {
uFile.setPath(uploadFile(uuid,file) +uuid+"."+SUFFIX);
} catch (IOException e) {
e.printStackTrace();
}
fileService.save(uFile);
}
}
}
}
return R.ok();
}
上传文件到本地的静态方法
/**
* 上传文件
*@author lyy
* @param file
* @return
* @throws IOException
* @throws IllegalStateException
*/
public static String uploadFile(String uuid, MultipartFile file) throws IllegalStateException, IOException {
String defaultUrl = MyFileConfig.getFilePath();
String Directory = java.io.File.separator ;
String realUrl = defaultUrl + Directory;
java.io.File realFile = new java.io.File(realUrl);
if (!realFile.exists() && !realFile.isDirectory()) {
realFile.mkdirs();
}
String fullFile = realUrl + uuid + "."+FileUtil.getFileExt(file.getOriginalFilename());
file.transferTo(new java.io. File(fullFile));
String relativePlanUrl = Directory;
return relativePlanUrl.replaceAll("\\", "/");
}
到此这篇关于Vue+Element+Springboot图片上传的实现示例的文章就介绍到这了,更多相关Vue+Element+Springboot图片上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://juejin.cn/post/7034009464445501453


猜你喜欢
- itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机
- 使用触发器触发器发生什么事情之后或之前,会自动执行某条语句,这就是触发器创建触发器创建触发器要给出的4条关键信息:1.唯一的触发器名2.触发
- 当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧——for复合语句。简单写一个小
- 关于__dict__和dir()的区别和作用请参考这篇文章:基于Python __dict__与dir()的区别详解说下我当时遇到的问题:c
- 在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置,授权
- 01 ReplicaSet的架构 前面的文章中,我们说了ReplicaSet的基本概念和限制以及部署前的基本知识。
- 据国外媒体报道,相较于IE8浏览器,微软最新一代浏览器IE9的最大改进就是硬件加速HTML5。微软承诺,通过利用IE9中的硬件加速功能,开发
- 前言:Redhat下安装Python2.7rhel6.4自带的是2.6, 发现有的机器是python2.4。 到python网站下载源代码,
- BP神经网络是最简单的神经网络模型了,三层能够模拟非线性函数效果。难点:如何确定初始化参数?如何确定隐含层节点数量?迭代多少次?如何更快收敛
- 我就废话不多说了,直接上代码吧!import urllib.requestimport requestsimport timeimport
- pip的基本使用安装pip1. cd 到你的python安装目录下的的Scripts文件夹下:2.执行easy_install.exe pi
- 一般在更新时会遇到以下场景:1.所有字段全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值以下是几种场景中常用的u
- 打印在使用go写一些小程序时,我们没必要引入额外的包,直接使用fmt标准包打印即可:import "fmt"func m
- 网上async with和async for的中文资料比较少,我把PEP 492中的官方陈述翻译一下。异步上下文管理器”async with
- Lists Snippets我们先从最常用的数据结构列表开始1.将两个列表合并成一个字典假设我们在 Python 中有两个列表,我们希望将它
- 1.在浏览器上搜索PyCharmhttps://www.jetbrains.com/pycharm/download/#section=wi
- <!--#include file="config.asp" -->&nbs
- mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()mo
- 最近心血来潮加上有点闲情,动手写了第一个JavaScript版的俄罗斯方块Easy Tetris.先上Easy Tetris俄罗斯方块游戏截
- 之前刚开始做爬虫的时候遇到过登录验证码问题,看过很多帖子都没有解决我的问题,发现大多数帖子都是治标不治本,于是想分享一下自己的解决方案。本次