前端环境配置

从Element文档找见upload对应的代码先copy下来,这里选择的是用户头像上传中的代码。然后要替换一下action中的接口地址,换成自己后端的,这里我的后端地址为http://localhost:5277/api/article/UploadPic

修改一下handleAvatarSuccess方法
这里提一嘴,如果你的项目中请求的时候需要携带token,那么要在upload中加上:headers="headers属性,把token赋值给headers

 handleAvatarSuccess(res, file) {console.log(res);this.imageUrl = res.data;console.log("图片预览的url:"+this.imageUrl);}

前端整体代码如下:

<template><el-uploadclass="avatar-uploader"action="http://localhost:5277/api/article/UploadPic":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":headers="headers"><img v-if="imageUrl" :src="data:imageUrl" class="avatar" /><i v-else class="el-icon-plus avatar-uploader-icon"></i></el-upload>
</template><style>
.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;
}
.avatar-uploader .el-upload:hover {border-color: #409eff;
}
.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;
}
.avatar {width: 178px;height: 178px;display: block;
}
</style><script>
import { getToken } from "@/utils/auth"; // get token from cookie
export default {data() {return {imageUrl: "",headers: {token: getToken() ? getToken() : "",},};},methods: {handleAvatarSuccess(res, file) {console.log(res);this.imageUrl = res.data;console.log("图片预览的url:"+this.imageUrl);},beforeAvatarUpload(file) {const isJPG = file.type === "image/jpeg";const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG) {this.$message.error("上传头像图片只能是 JPG 格式!");}if (!isLt2M) {this.$message.error("上传头像图片大小不能超过 2MB!");}return isJPG && isLt2M;},},
};
</script>

文件auth.js中的getToken()方法为

import Cookies from 'js-cookie'const TokenKey = 'Admin-Token'export function getToken() {return Cookies.get(TokenKey)
}

搭建后端环境

可以参考之前的一篇文章,用IDEA快速搭建SpringBoot环境,这里搭建环境不做重点介绍。搭建完环境以后,引入上传文件的依赖

     <!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency>

这里要重点说明一下,浏览器只能访问resources/static下的文件,之后把图片存到里面才可以直接访问。这里在static下再新建一个img文件夹专门用于存放图片。

如果这个img文件夹直接放在resource下是访问不到的,会报404的错误。文件会上传到target/classes/static/img目录下

之后访问的时候直接使用端口号+/img(如http://localhost:5277/img/2022-04-97/154b20d9-32de-43b7-997e-50e925a8becc.png)即可访问到,访问链接中不需要再img之前再加static/,否则也会报404的错误。

     //返回可供外界访问的urlString url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;

之后建立Controller文件

import com.cms.utils.ResultUtils;
import com.cms.utils.ResultVo;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@RestController
@RequestMapping("/api/article")
public class ImgController {@PostMapping("/UploadPic")public ResultVo UploadPic(MultipartFile file, HttpServletRequest request) throws FileNotFoundException {SimpleDateFormat dateFormat = new SimpleDateFormat("/yyyy-MM-DD/");String filename = file.getOriginalFilename();//取得文件名称if (!filename.endsWith(".png") && !filename.endsWith(".jpg")) {return ResultUtils.error("文件类型不对");}String format = dateFormat.format(new Date());//realPath为文件保存的位置String realPath = ResourceUtils.getURL("classpath:").getPath() + "static/img" + format;realPath = realPath.substring(1);//去掉第一个/符号File folder = new File(realPath);if (!folder.exists()) {folder.mkdirs();}String newName;if (filename.endsWith(".png"))newName = UUID.randomUUID().toString() + ".png";elsenewName = UUID.randomUUID().toString() + ".jpg";try {//新建文件file.transferTo(new File(folder, newName));//String url = realPath + newName;} catch (IOException e) {return ResultUtils.error(e.getMessage());}//返回可供外界访问的urlString url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/img" + format + newName;return ResultUtils.success("图片上传成功", url);}
}

注:这里ResultUtils和ResultVo是我自定义的两个类

ResultUtils:

/*** 数据返回工具类*/
public class ResultUtils {/*** 无参数返回* @return*/public static ResultVo success() {return Vo(null, StatusCode.SUCCESS_CODE, null);}public static ResultVo success(String msg){return Vo(msg,StatusCode.SUCCESS_CODE,null);}/*** 返回带参数* @param msg* @param data* @return*/public static ResultVo success(String msg,Object data){return Vo(msg,StatusCode.SUCCESS_CODE,data);}public static ResultVo success(String msg,int code,Object data){return Vo(msg,code,data);}public static ResultVo Vo(String msg, int code, Object data) {return new ResultVo(msg, code, data);}/*** 错误返回* @return*/public static ResultVo error(){return Vo(null,StatusCode.ERROR_CODE,null);}public static ResultVo error(String msg){return Vo(msg,StatusCode.ERROR_CODE,null);}public static ResultVo error(String msg,int code,Object data){return Vo(msg,code,data);}public static ResultVo error(String msg,int code){return Vo(msg,code,null);}public static ResultVo error(String msg,Object data){return Vo(msg, StatusCode.ERROR_CODE,data);}
}

ResultVo:

public class ResultVo<T> {private String msg;private int code;private T data;
}

这样就上传成功了

注:如果项目中加入了Spring Security,要对图片访问链接进行放行。
再次感谢一位神秘计科大佬鼎力相助~

前后端分离使用Spring Boot + el-upload 完成图片上传相关推荐

  1. 前后端分离 -- 深入浅出 Spring Boot + Vue + ElementUI 实现相册管理系统【文件上传 分页 】 文件上传也不过如此~

    前后端分离 – 深入浅出系列 Spring Boot + Vue + ElementUI 实现相册管理系统[文件上传 分页 ] 文件上传也不过如此~ 引言 Hello,我是Bug终结者,一名热爱后端J ...

  2. 自学前后端分离1 Spring Boot+Vue概述

    一,前后端分离. 前后端分离时将一个应用的前端代码和后端代码分开写,如果不用前后端分离传统的JavaWeb开发中前端使用JSP开发,JSP不是由后端开发者来独立完成的前端--〉html静态页面---- ...

  3. Spring Boot 2.0 多图片上传加回显

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:http://r6f.cn/crEY 这两天公司有 ...

  4. java前后端分离框架_Spring Boot 入门及前后端分离项目实践

    本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发.Spring Boot ...

  5. spring boot 整合 阿里云oss上传

    Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...

  6. spring boot接收微信小程序上传的文件

    spring boot接收微信小程序上传的文件,首先前台传给我们后端的不是一个路径,而是以一个文件类型传递给我,这时我们在controller层接收时就可以用MultipartFile进行接收,如果接 ...

  7. 若依前后端分离版怎样修改主页面和浏览器上的图标和标题

    场景 使用若依的前后端分离版,,其默认的图标和标题等如下 如果想要修改为自己想要的标题和图标,实现类似下面的效果 注: 博客: https://blog.csdn.net/badao_liumang_ ...

  8. Spring Boot 利用WebUploader进行文件上传

    Web Uploader WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势 ...

  9. Spring Boot 2.X 实现文件上传(三)

    使用 SpringBoot 项目完成单个.多个文件的上传处理,并将上传的文件保存到指定目录下. 代码演示案例 所有的 HTML 页面文件 index.html <!DOCTYPE html> ...

  10. vue后台管理upload(图片上传)

    众所周知,在很多项目中,特别是关于商品管理类的新增功能中,都会带有新增图片的功能,上传图片是很多前端小白的噩梦,接下来我们就来讲一下上传图片的流程,以及详细代码 # 上传图片 ## 常见的图片上传的方 ...

最新文章

  1. 6款强大的jQuery插件 创建和加强网站布局
  2. 【CV】深度了解自监督学习,就看这篇解读 !SimMIM:掩码图像建模的简单框架...
  3. 基于roslyn的动态编译库Natasha
  4. 亚马逊 ai 解雇_解雇社区成员
  5. 贪心策略——活动选择问题
  6. python没有数据类型_python基本数据类型都在这里了!
  7. php中的正则表达式相关例题,实例学习PHP中的正则表达式
  8. character-RNN模型介绍以及代码解析
  9. Java 设计模式 之 代理模式(Proxy)
  10. Python 简单函数入门之“计算器“
  11. 常用的eclipse插件下载地址
  12. moxa串口卡Linux驱动,moxa多串口驱动下载
  13. 格式工厂视频格式转换器下载
  14. IOS OC UIKit基本使用
  15. vue项目中 路径使用的@和~的区别
  16. 汉诺塔(hanio)
  17. word2016修改批注名字
  18. 织梦 帝国 php,PHPCMS、织梦DEDECMS、帝国CMS的抉择与比较
  19. cmd、conhost退居二线,Win 11将设置默认终端
  20. 计算机网络基础知识满昌勇,《计算机网络》说课课件.ppt

热门文章

  1. 厨神之路一--群英荟萃1
  2. 高数笔记(十九):对面积的曲面积分,对坐标的曲面积分,高斯公式,斯托克斯公式
  3. 使用OpenSER构建电话通信系统——第一章(2)
  4. AS移动开发 类微信界面2_Activity的生命周期与跳转(持续更新中)
  5. 4、nerf(pytorch)
  6. 21经济网专访 | 巨杉下一个十年:扎根科创福地,打造数据库行业生态
  7. vue 萤石_记录Vue结合萤石视频ezuikit.js的爬坑记录
  8. 利用免费cdn加速webpack单页应用
  9. hadloop大数据平台论文_基于Hadoop的大数据解决方案的设计及应用
  10. 关于WEP的产生原因及其原理