1

我在 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或类似的值,它不起作用。

你会如何在视图之间传播这个文件呢?

4

1 回答 1

6

在您的 Spring 控制器中,您可以访问HttpSession. 该对象用于存储用户请求之间的信息。您可以使用getAttribute(String)andsetAttribute(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对管理会话中的属性的界面感兴趣。

于 2013-05-24T15:19:06.170 回答