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这个组件上传滴
2、后台代码 参考就行了我这里用了sftp上传文件到云服务器文件上传工具参考这篇文章
//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"); }}
其中/usr/fjl/file 是服务器路径的地址
3、那么问题来了现在这样肯定是不能解决上传问题滴(重点配置)新增一个配置 :这个代码很关键,这个就是指定临时上传路径的临时地址(本地也会报错)
@beanmultipartconfigelement 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里增加上述代码。
以上就是springboot文件上传临时目录找不到怎么解决的详细内容。