1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解决使用Spring Boot上传图片路径错误问题【入坑之一】

解决使用Spring Boot上传图片路径错误问题【入坑之一】

时间:2020-01-07 16:52:21

相关推荐

解决使用Spring Boot上传图片路径错误问题【入坑之一】

推荐一个性价比不错的虚拟机:/qqtingshuo/article/details/82964537

1.问题描述

关键字:Spring Boot 1.3.1 、Servlet 3.0 、文件上传报错信息:

java.io.IOException:The temporary upload location [C:\Users\听说\AppData\Local\Temp\tomcat.4932744338098462436.8080\work\Tomcat\localhost\ROOT] is not valid

因为是测过的代码,所以可以保证不是我本地代码异常,一定是服务器有问题,查询后确认,原来是文件上传临时上传文件夹失效了,可能是系统清除了临时目录。

2.代码(上传图片)

/*** 图片上传controller* <p>Title: PictureController</p>* <p>Description: </p>* <p>Company: </p>* @version 1.0*/@CrossOrigin@Controllerpublic class PictureUtil {@Value("${IMAGE_SERVER_URL}")private String IMAGE_SERVER_URL;@PostMapping("/pic/upload")@ResponseBodypublic RestResponse picUpload(MultipartFile uploadFile) {try {if (uploadFile!=null){//接收上传的文件//取扩展String originalFilename = uploadFile.getOriginalFilename();String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);//上传到图片服务器FastDFSClient fastDFSClient = new FastDFSClient("client.properties");String url = fastDFSClient.uploadFile(uploadFile.getBytes(), extName);url = IMAGE_SERVER_URL + url;//响应上传图片的urlreturn RestResponse.success(url);}else {return RestResponse.failure("请选择图片");}} catch (Exception e) {e.printStackTrace();return RestResponse.failure(e);}}}

3.问题分析

1、报错确是一个系统临时文件路径(tomcat的)

如果我们没有使用绝对路径的话,transferTo方法会在相对路径前添加一个location路径,即:file = new File(location, fileName);

4.问题解决方案

解决方案有三种

1:重启服务,不建议在生产环境使用。

2:增加服务配置,自定义baseDir。

3:注入bean,手动配置临时目录,建议有项目组统一配置,便于管理和错误定位。

使用绝对路径(最简单的一种,第三种)修改location的值

这个location可以理解为临时文件目录,我们可以通过配置location的值,使其指向我们的项目路径,这样就解决了我们遇到的问题。

在Spring Boot下配置location,可以在main()方法所在文件中添加如下代码:

@SpringBootApplicationpublic class MessageServerApplication {public static void main(String[] args) {SpringApplication.run(MessageServerApplication.class, args);}/*** 文件上传临时路径*/@BeanMultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory = new MultipartConfigFactory();factory.setLocation("d://temp");return factory.createMultipartConfig();}}

经过配置后,再次上传文件,就可以直接上传了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。