Vue+elementui前后端分离,单个图片文件上传和上传时出现的跨域问题的解决方案

在后端解决跨域问题:
我是通过配置文件来解决跨域问题的

@Configuration
public class CorsConfig {//解决前后端分离的跨域问题!

/**
* cors support
* @return
*/
@Bean
public FilterRegistrationBean corsFilter() {
// 注册CORS过滤器
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); // 是否支持安全证书
config.addAllowedOrigin("*"); // 允许任何域名使用
config.addAllowedHeader("*"); // 允许任何头
config.addAllowedMethod("*"); // 允许任何方法(post、get等)
// 预检请求的有效期,单位为秒。
// config.setMaxAge(3600L);

source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}


下面看一下单个图片的上传过程:

先看一下前端的写法:

auto-upload是否自动提交到页面

accept是接受的图片格式

:on-change是当前页面改变时的回调方法

前端图片上传的方法:

解释一下:

file是最新选择的文件,filters是已经选择过的文件。这里我只用到file
先对接收的图片文件格式进行检查,然后图片大小也不能超过1.5M
构建一个formData表单来接收传过去的数据,包括图片文件本身,还有所要修改的用户的id
 
前端代码看完,看后端的接口

 

 要注意:这里MultipartFile的实例名称要跟前端formData接收的图片文件所写的名称一样

 

 解释一下:

getOriginalFilename()是传过来的图片文件的名称,包含后缀!
AssertUtil.isTrue()方法 如果里面的条件是成立的,就抛出对应的自定义异常

注意上面的图片存放位置,如果前端直接写本地图片的地址会报错:
Not allowed to load local resource。因为springboot是内置的tomcat,浏览器为了安全起见是不能直接访问本地资源的。
所以不能通过浏览器直接访问本地资源,必须在前端页面中拼的是一个网络路径而不是文件的本地路径!

在application.yml配置文件配置虚拟的图片映射路径,如同画圈部分!

 

 

最后在拦截器放行访问图片等静态资源

 

 这样就可以实现图片的上传啦!

 

 

posted @ 2021-07-07 13:01  向往而生  阅读(2471)  评论(1编辑  收藏  举报