I believe everyone will encounter such a problem when deploying the project to the server:
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.
This question also confuses me For a long time, I searched online and couldn't find a solution. The only solution is to specify a temporary directory to the server and it will be ok. No nonsense, here is the code.
File upload tool refer to this article
//www.jb51.net/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"); } }
where/usr/fjl/file It is the address of the server path
(key configuration) Add a new configuration: This code is very critical. This is the temporary address that specifies the temporary upload path (an error will also be reported locally)
@Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); //factory.setLocation("D:/tmp"); 本地用 factory.setLocation("/home/temp"); //服务器用 return factory.createMultipartConfig(); }
Just add this and the file can be uploaded successfully. If it is cross-domain, you will also get the configuration and code configuration in nginx. .
@Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation(tmepPath); return factory.createMultipartConfig(); }
Add the above code in Application.java.
The above is the detailed content of How to solve the problem that the temporary directory for SpringBoot file upload cannot be found. For more information, please follow other related articles on the PHP Chinese website!