解决SpringBoot文件上传临时目录找不到的问题


Posted in Java/Android onJuly 01, 2021

SpringBoot文件上传临时目录问题

我相信大家在把项目部署到服务器上面时候都会遇到这样一个问题:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet
request;nested exception is java.io.IOException: The temporary upload location
[/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] is not valid
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipart
HttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.

这个问题也是困惑我很久,网上找了都没有找到解决方案,唯一解决办法就是指定临时目录到服务器就ok.不废话啦上代码。

1、前台肯定是搭配multipart/form-data springMvc这个组件上传滴

解决SpringBoot文件上传临时目录找不到的问题

2、后台代码 参考就行了我这里用了SFTP上传文件到云服务器

文件上传工具参考这篇文章

//www.3water.com/article/216456.htm

@Log("文件上传")
@ResponseBody
@PostMapping("/upload")
@RequiresPermissions("common:companyremittance:upload")
R upload(@RequestParam("file") MultipartFile file,@RequestParam("arrys") String arrys, @RequestParam("commpanyname") 
        String  commpanyname,@RequestParam("remittancedate") String  remittancedate,HttpServletRequest request) throws ParseException, IOException {

    //先上传到图片服务器上面然后在读取信息
    int prostatusId=0;
    if(StringUtils.isEmpty(arrys)){
        return R.error("导入失败");
    }

    String oldName = file.getOriginalFilename();
    //使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀
    String newName = IDUtils.genImageName();
    newName = newName + oldName.substring(oldName.lastIndexOf("."));
    SftpUtils ft = new SftpUtils();
    //通过SFtoInfo  参数连接传入参数即可
    Session s = ft.getSession(SFTPInfo.SFTP_REQ_HOST,SFTPInfo.SFTP_DEFAULT_PORT, SFTPInfo.SFTP_REQ_USERNAME,SFTPInfo.SFTP_REQ_PASSWORD);
    Channel channel = ft.getChannel(s);
    ChannelSftp sftp = (ChannelSftp)channel;
    Boolean upload = ft.uploadFile(sftp,SFTPInfo.basePath, file.getInputStream(),newName);
    SaveDO saveDO=new SaveDO();
    if(upload){
        //上传成功关闭信息
        saveDO.setFileurl(SFTPInfo.baseUrl+ "/" + newName);
        saveDO.setFilename(oldName);
        saveDO.setFilesize(String.valueOf(file.getSize()));
        saveDO.setImportdate(new Date());
        saveDO.setIpaddr(IPUtils.getIpAddr(request));
        saveDO.setUsername(ShiroUtils.getUser().getUsername());
        saveDO.setSftpupurl("/usr/fjl/file");  //这里是文件路径上传服务器里面路径 记得chomd  777

        saveDO.setNewfilename(newName);
        saveService.save(saveDO);
        //根据proentId查询项目的状态
        CompanyremittanceDO companyremittanceDO1=new CompanyremittanceDO();
        companyremittanceDO1.setProparentid(Long.valueOf(arrys));
        CompanyremittanceDO aDo = companyremittanceService.getProjectStatus(arrys);
        if (aDo != null) {
            companyremittanceDO1.setProstatus(aDo.getProstatus());
        } else {
            //自增状态++1
            prostatusId = companyremittanceService.getMaxProStatus();
            prostatusId++;
            companyremittanceDO1.setProstatus(prostatusId);
        }
        companyremittanceDO1.setRemittancename(commpanyname);
        companyremittanceDO1.setRemittancedate(getDate(remittancedate));
        String fileName = file.getOriginalFilename();
        fileName = FileUtil.renameToUUID(fileName);
        try {
            boolean flag=  ExcelUtil.batchImport(fileName,file,companyremittanceService,companyremittanceDO1);
            if(flag){
              if(ft.delete(saveDO.getSftpupurl(),saveDO.getNewfilename(),sftp)){
                  ft.closeAll(sftp, channel, s); //关闭连接
               return    R.ok("导入成功");
              }else{
                  return R.ok("数据导入成功!服务器数据文件没有删除!");
              }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return R.error();
        }
        return R.error();
    }else {
        return R.error("上传error");
    }
}

其中/usr/fjl/file 是服务器路径的地址

解决SpringBoot文件上传临时目录找不到的问题

3、那么问题来了现在这样肯定是不能解决上传问题滴

(重点配置)新增一个配置 :这个代码很关键,这个就是指定临时上传路径的临时地址(本地也会报错)

@Bean
MultipartConfigElement multipartConfigElement() {
   MultipartConfigFactory factory = new MultipartConfigFactory();
   //factory.setLocation("D:/tmp"); 本地用
      factory.setLocation("/home/temp"); //服务器用
   return factory.createMultipartConfig();
}

加上这个就好了 文件就可以上传成功,如果跨域还得到nginx 里面配置和代码配置.

SpringBoot更改上传文件临时目录

@Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setLocation(tmepPath);
        return factory.createMultipartConfig();
    }

再Application.java里增加上述代码。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
OpenCV实现普通阈值
Nov 17 Java/Android
剑指Offer之Java算法习题精讲二叉树专项训练
Mar 21 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
Apr 14 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Spring boot实现上传文件到本地服务器
Aug 14 Java/Android
java实现对Hadoop的操作
Jul 01 #Java/Android
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
Jul 01 #Java/Android
Java中多线程下载图片并压缩能提高效率吗
分析ZooKeeper分布式锁的实现
Java并发编程必备之Future机制
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 #Java/Android
浅谈resultMap的用法及关联结果集映射
You might like
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
python基于http下载视频或音频
2018/06/20 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
python 调用Google翻译接口的方法
2020/12/09 Python
大学生毕业鉴定
2014/01/31 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
反邪教警示教育方案
2014/05/13 职场文书
廉洁校园实施方案
2014/05/25 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
新教师培训心得体会
2014/09/02 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
会计电算化实训报告
2014/11/04 职场文书
保研专家推荐信范文
2015/03/25 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python