我在Web应用程序中使用Spring MVC.我有一个视图,我允许用户上传文件,我想在后续视图之间保留此文件,因此在控制器操作中,我将其添加到我的下一个视图的模型中:
@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
或类似的值,但它不起作用.
如何在视图之间传播此文件?
在Spring控制器中,您可以访问HttpSession
.此对象用于在用户请求之间存储信息.您可以使用getAttribute(String)
和setAttribute(String, Object)
方法执行此操作.
如果您希望上传的文件可以通过CommonsMultipartFile
界面跨多个请求使用,则可以将该对象存储在会话中.例如:
HttpSession session = ... // get the session, you have it in your handler method CommonsMultipartFile uploadedFile = ...; // same as above session.setAttribute("UPLOADED_FILE", uploadedFile);
现在只要你的会话有效,即.没有超时或失效,任何Controller或servlet都可以访问此对象
CommonsMultipartFile uploadedFile = session.getAttribute("UPLOADED_FILE");
Spring有一个注释@SessionAttributes
,你可以在这里看一个例子,但我不喜欢它.
您可能对HttpSessionListener
用于管理会话中的属性的界面感兴趣.