SpringBoot上传文件
在SpringBoot中上传文件文件格式 此处采用的是异步对文件的上传
此处文件的上传采用的是 将前端异步传入的图片进行保存在服务器上面
所有的核心逻辑都是在Controller中实现
@Api(tags = "师资队伍")
@RestController
@CrossOrigin //前后端分离配置跨域访问
@RequestMapping("/uploadteacherImg")
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
public class TeacherController {
@Autowired
private TeacherService teacherService;
@ApiOperation("头像上传")
@PostMapping
@SystemControllerLog(description ="上传教师头像")
public CommonResult uploadteacherImg(MultipartFile file) throws IOException{
System.out.println("前端传入的文件:"+file);
String originalFilename = file.getOriginalFilename();
String savefileName="";
if (!file.isEmpty()) {
// 防止图片名字 出现重复
savefileName = UUID.randomUUID() + "." + file.getContentType()
.substring(file.getContentType().lastIndexOf("/") + 1);
//获取项目根路径
String path = System.getProperty("user.dir");
//获取文件存储路径
String savePath = path + "/src/main/resources/images/";
//文件转存
try {
file .transferTo(new File(savePath + File.separator + savefileName));
System.out.println("存储路径:" + savePath + File.separator + savefileName);
return CommonResult.success("/images/" + savefileName, "头像上传成功!");
} catch (IOException e) {
e.printStackTrace();
return CommonResult.failed("上传失败!");
}
}
return CommonResult.success("/images/" + savefileName, "头像上传成功!");
}
对应的就是 图片的上传 并且对图片路径的判断 以及对图片回先路径的确定
对应的图片位置的回显
// 对应前端访问后端静态资源 对应地址映射
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 动态获取项目所在路径
String ValuePath = System.getProperty("user.dir");
// 对应就是 项目对应的静态资源路径
String path=ValuePath+"\\src\\main\\resources\\images";
// 前端访问所在 的路径映射
registry.addResourceHandler("/images/**","/articleimages/**").addResourceLocations("file:"+path+"/");//注意最后斜杠必须有
}
}
所遇到的错误合集
可能存在 对应的传入的file 是空值 解决方案
可以这样
首先判断自己的mvc执行流程配置是否正确的
在controller中进行确认 需要使用 @RestController
并且对应的接收参数处 需要使用对应的PostMapping
或者 这样
// 对应的引入执行该配置文件
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
public class UploadConfig {
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上传文件大小
resolver.setMaxUploadSize(5 * 1024 * 1024);
return resolver;
}
}
再或者这样
-
对应的就是传递的时候 是否接收的参数 对应的需要使用@RequestParam 如果是没有参数 就需要确定使用 对应的传入的参数名字
-
如果是异步 切记 不能和对应的pojo中定义相同的参数名字 否则前端一直报错 没有正确传入参数