java.lang.IllegalStateException:文件已被移动-不能再次传输
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.lang.IllegalStateException:文件已被移动-不能再次传输,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5780字,纯文字阅读大概需要9分钟。
内容图文
![java.lang.IllegalStateException:文件已被移动-不能再次传输](/upload/InfoBanner/zyjiaocheng/677/57a431cf955c46259794a14c4591ce8f.jpg)
这个问题已经在这里有了答案: > Problem with Spring FileUpload 3个
我正在尝试上传文件并将其保存在服务器上.但是我得到:
java.lang.IllegalStateException: File has already been moved - cannot be transferred again
我正在使用Commons FileUpload jar(CommonsMultipartFile).我得到IllegalStateException的声明:
user.getFileData().transferTo(新File(“ / home / xavier / uploads /” user.getFileData().getOriginalFilename()));
这里的用户是bean.最初它对我有用,但是当我通过从uploads文件夹中删除文件再次进行测试时,它抛出了上述异常.
堆栈跟踪:
java.lang.IllegalStateException: File has already been moved - cannot be transferred again
at org.springframework.web.multipart.commons.CommonsMultipartFile.transferTo(CommonsMultipartFile.java:126)
at com.raistudies.controllers.RegistrationController.processForm(RegistrationController.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:722)
解决方法:
您在问题中引用的异常指出:“文件已移动-无法再次读取”.这是因为我们试图从多部分文件中读取输入流多次.
我也一次遇到了这个问题,以我为例,首先我验证了文件的内容,然后我尝试使用Spring MultiPart中的“ transferTo”方法保存文件.当我尝试使用“ transferTo”方法时,会出现此异常.在这里,我两次呼吁输入流.
文件大小过小时,我不会遇到此问题.在“ transferTo”方法中,有一个“ isAvailable”方法的内部调用.请遵循以下代码段:
protected boolean More ...isAvailable() {
// If in memory, it's available.
if (this.fileItem.isInMemory()) {
return true;
}
// Check actual existence of temporary file.
if (this.fileItem instanceof DiskFileItem) {
return ((DiskFileItem) this.fileItem).getStoreLocation().exists();
}
// Check whether current file size is different than original one.
return (this.fileItem.getSize() == this.size);
}
观察结果:
如果它太小,请春季将其保存在内存中,当我们要求从内存中检索文件时.我们可以多次请求它,因为文件在内存中.
如果足够大,Spring会将其保存为一个我们不知道位置的临时文件,但是一旦我们读取了输入流,Spring可能会在内部删除该文件.然后,当我们第二次要求该错误时显示“无法再次读取”.
因此,我的解决方案是,首先我必须使用“ transferTo”方法将其保存在服务器位置中,并检索该本地文件以进行验证或任何其他第二次需要.
我认为在“ multipartResolver” bean中增加“ maxUploadSize”是不好的,因为如果文件太大,它将消耗更多的内存.
内容总结
以上是互联网集市为您收集整理的java.lang.IllegalStateException:文件已被移动-不能再次传输全部内容,希望文章能够帮你解决java.lang.IllegalStateException:文件已被移动-不能再次传输所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。