java - 临时文件未找到文件异常

标签 java spring jsf tomcat primefaces

我正在构建 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 .这是不对的。您应该在 <p:fileUpload handleFileUpload>立即获取上传的文件内容文件上传监听器方法(或提交按钮,如果您使用 <p:fileUpload mode="simple"> )。将其存放在更永久的位置。例如。本地磁盘文件系统或数据库,甚至可能是 byte[] bean 属性。然后传本地磁盘文件系统文件名,或者数据库PK,或者byte[]而是为了有一个句柄来下载文件。

总结一下,只要确保你的Serializable支持 bean 完全没有 UploadedFile属性(property)和这个问题将消失。

关于java - 临时文件未找到文件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422268/

相关文章:

Java SSH 连接

spring - 更改密码 - Spring Security

java - 对于 JSF 2.0,如何在 Tomcat 6 上启用 EL 2.2

java - Tomcat JSR 356 websocket 刷新页面时出现异常

java - 使用负边权重的 Bellman-Ford 追踪最长路径

java - Maven:无法在项目上执行目标。 Hibernate 5 从 repo.spring.io 消失了?

java - 为什么当父级更新时,Hibernate 会执行多个更新子级的查询?

node.js - 是否可以将 Node.js 集成到 java web 应用程序中以获得聊天功能等某些功能?

Java EE 应用程序数据库架构

java - KeyListener 仅有时有效