我正在构建 java 应用程序(Spring & JSF & PrimeFaces)。我将文件上传到服务器,但是,如果我在文件上传结束后立即单击“下一步”按钮,则会收到此错误:
Aug 24, 2013 8:12:34 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/codekata] threw exception [Request processing failed; nested exception is org.springframework.webflow.execution.repository.FlowExecutionRestorationFailureException: A problem occurred restoring the flow execution with key 'e1s3'] with root cause
java.io.FileNotFoundException: C:\Users\Luke\AppData\Local\Temp\upload__6f71235a_140b1bdd246__8000_00000011.tmp (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at org.apache.commons.fileupload.disk.DiskFileItem.readObject(DiskFileItem.java:709)
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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
java.lang.Thread.run(Thread.java:722)
如果我等几秒钟,一切都会正常。
我假设上传文件需要有时间将自身复制到临时文件夹,有谁知道如何解决这个问题。我用的是Tomcat 7。
下面是我的下载方法:
public StreamedContent getDownloadFile()
{
InputStream inputStream = new ByteArrayInputStream(selectedBook.getBookText().getText().getBytes());
return new DefaultStreamedContent(inputStream, "text/plain", selectedBook.getTitle() + ".txt", BookBean.encoding);
}
谢谢,
卢克.
根据堆栈跟踪,您似乎正在存储UploadedFile
实例作为类的属性,它本身就是Serializable
。这个不对。您应该抓取上传的文件内容立即地 in the <p:fileUpload handleFileUpload>
文件上传侦听器方法(或提交按钮,如果您使用的是<p:fileUpload mode="simple">
)。将其存放在更永久的位置。例如。本地磁盘文件系统,或数据库,甚至可能作为byte[]
豆属性。然后传递本地磁盘文件系统文件名,或者数据库PK,或者byte[]
而是为了有一个句柄来下载文件。
总结一下,只要确保您的Serializable
支持 bean 完全不含UploadedFile
财产,这个问题就会消失。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)