Spring 保留在视图之间上载的文件

Spring 保留在视图之间上载的文件,spring,spring-mvc,file-upload,Spring,Spring Mvc,File Upload,我正在web应用程序中使用SpringMVC。我有一个允许用户上载文件的视图,我希望在后续视图之间保留此文件,因此在控制器操作中,我将其添加到下一个视图的模型中: @RequestMapping("/loadFile") public String loadFile( Model model, @RequestParam(required = true) CommonsMultipartFile uploadedFile, HttpSer

我正在web应用程序中使用SpringMVC。我有一个允许用户上载文件的视图,我希望在后续视图之间保留此文件,因此在控制器操作中,我将其添加到下一个视图的模型中:

@RequestMapping("/loadFile")
    public String loadFile(
            Model model, 
            @RequestParam(required = true) CommonsMultipartFile uploadedFile,
HttpServletRequest request, HttpSession session) 
{
//some process
model.addAttribute("file", uploadedFile);
}
因此,我的下一个视图应该可以访问该文件。我尝试复制文件上载视图的形式,然后将此文件值分配给文件输入,如下所示:

但这会分配一个值org.springframework.web.multipart.commons。CommonsMultipartFile@57836c9d或者类似的东西,但它不起作用


如何在视图之间传播此文件,如so?

在Spring控制器中,您可以访问。此对象用于存储用户请求之间的信息。您可以使用getAttributeString和setAttributeString对象方法来实现这一点

如果希望上载的文件在多个请求中可用,则可以通过CommonsMultipartFile接口将该对象存储在会话中。例如:

HttpSession session = ... // get the session, you have it in your handler method
CommonsMultipartFile uploadedFile = ...; // same as above
session.setAttribute("UPLOADED_FILE", uploadedFile); 
现在,只要会话有效,即未超时或无效,任何控制器或servlet都可以访问此对象

CommonsMultipartFile uploadedFile = session.getAttribute("UPLOADED_FILE");
Spring在@SessionAttributes中对此有一个注释,您可以看一个示例,但我不喜欢它


您可能对管理会话中属性的接口感兴趣

在Spring控制器中,您可以访问。此对象用于存储用户请求之间的信息。您可以使用getAttributeString和setAttributeString对象方法来实现这一点

如果希望上载的文件在多个请求中可用,则可以通过CommonsMultipartFile接口将该对象存储在会话中。例如:

HttpSession session = ... // get the session, you have it in your handler method
CommonsMultipartFile uploadedFile = ...; // same as above
session.setAttribute("UPLOADED_FILE", uploadedFile); 
现在,只要会话有效,即未超时或无效,任何控制器或servlet都可以访问此对象

CommonsMultipartFile uploadedFile = session.getAttribute("UPLOADED_FILE");
Spring在@SessionAttributes中对此有一个注释,您可以看一个示例,但我不喜欢它


您可能对管理会话中属性的接口感兴趣

您看到的是toString方法的值。在第二个视图中,是否希望能够在输入字段中查看文件的路径?除了从第一个表单接收请求的控制器操作之外,我还希望在其他控制器操作中访问此文件。为什么不将其保存到磁盘,并在以后的请求中访问它?因为我会冒事后不删除它的风险,由于用户只需关闭当前页面,我就不知道什么时候删除它……您可以使用HttpSessionListener来完成此操作。将CommonsMultipartFile存储在会话中。您看到的是toString方法的值。在第二个视图中,是否希望能够在输入字段中查看文件的路径?除了从第一个表单接收请求的控制器操作之外,我还希望在其他控制器操作中访问此文件。为什么不将其保存到磁盘,并在以后的请求中访问它?因为我会冒事后不删除它的风险,由于用户只需关闭当前页面,我就不知道什么时候删除它……您可以使用HttpSessionListener来完成此操作。在会话中存储CommonsMultipartFile。我想到了这个解决方案,但我的文件可能非常大,最大可达15mb。这不是一个问题吗?@MichelReap CommonsMultipartFile实际上并没有在内存中存储字节,它有一个对您所插入的持久化文件的引用。容器将其保存到磁盘,并在需要时检索字节,所以不。我不知道,这听起来是一个完美的解决方案。谢谢@您可以对ApacheCommons如何处理多部分文件进行更多的研究。您正在使用的Spring模块是建立在它之上的。@SotiriosDelimanolis我在会话中发送多部分文件列表时出错。您能帮我吗。。!我想到了这个解决方案,但我的文件可以相当大,高达15mb。这不是一个问题吗?@MichelReap CommonsMultipartFile实际上并没有在内存中存储字节,它有一个对您所插入的持久化文件的引用。容器将其保存到磁盘,并在需要时检索字节,所以不。我不知道,这听起来是一个完美的解决方案。谢谢@您可以对ApacheCommons如何处理多部分文件进行更多的研究。您正在使用的Spring模块是建立在它之上的。@SotiriosDelimanolis我在会话中发送多部分文件列表时出错。您能帮我吗。。!