图片上传问题 Could not parse multipart servlet request; nested exception is java.io.IOException解决

问题描述:spring boot 通过MultipartFile上传文件,两台电脑客户端,今天客户端A可以正常传文件,而B无法传文件,明天客户端A则无法正常传文件,而B可以。

结果:看错误是因为无临时目录导致上传文件失败,临时文件不存在是因为linux自动清理10天未操作的临时文件目录,而两个客户端时而可以时而不可以的问题是因为,采用了两台服务器的负载均衡,一台服务器由于10天未被分配到访问导致临时目录被清理,而另一台则收到访问临时目录未被清理,所以当无论哪台客户端被分配访问未被清理临时目录的服务器时都可以正常上传文件,而另一台则无法正常上传文件解决办法有三种:
1 重启项目,系统会自动重新生成该目录
2 手动创建该目录
3 在代码中增加系统默认目录配置 ,如下:
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("/app/tmp");
return factory.createMultipartConfig();
}
 

之后你会发现会报没有目录的错误提示 ;The temporary upload location [/app/tmp] is not valid

其实上面的代码没有从根本上解决问题,修改如上代码为:问题解决
 

@Configuration
public class MultipartConfig {

    /**
     * 文件上传临时路径
     */
    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        String location = System.getProperty("user.dir") + "/data/tmp";
        File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }
}


这篇文章对自动清理文件有很好的说明http://blog.51cto.com/kusorz/2051877?utm_source=oschina-app

发布了8 篇原创文章 · 获赞 1 · 访问量 2101

猜你喜欢

转载自blog.csdn.net/lushujie_bei/article/details/89916216