如何使用 spring mvc3 上传文件?

How to upload file using spring mvc3?

我想上传文件并使用 Spring MVC3 进行处理。我试过

@RequestMapping(value = "uploadAction.do")
public ModelAndView upload(
@RequestParam("file") CommonsMultiPartFile file
)
{

System.out.println(file);
ModelAndView view = new ModelAndView();
return view;
}

但它不起作用,我混淆了 @RequestParam@ModelAttribute 所以请帮助我

像这样:

@RequestMapping(value="/upload", method=RequestMethod.POST)
    public String upload( @RequestParam("upload") 
                          MultipartFile multipartFile
                          ...                         
){          
    ....
}

并且需要 enctype 格式:

<form id="command" name="command" method="POST" action="/upload" enctype="multipart/form-data">
     ....
      <input id="upload" type="file" name="photo">
     ....
</form>

上传功能取决于几个因素。由于 docs,以下是您必须确保的事项

发出 POST 请求。文件上传应该是一个POST请求

@RequestMapping(value = "uploadAction.do", method=RequestMethod.POST)

通过向 Web 应用程序的上下文添加多部分解析器来启用 Spring 多部分处理

     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
         <!-- one of the properties available; the maximum file size in bytes -->
         <property name="maxUploadSize" value="100000"/>
    </bean>

确保 commons-fileupload.jar 在您的类路径中,如果您使用的是 Maven,则以下内容应该涵盖您

    <!-- File Upload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.2.2</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>

所有这些都准备就绪后,您的映射应该可以正常工作,前提是您的表单没问题,这里是一个示例

    <form id="fileuploadForm" action="/uploadAction.do" method="POST" enctype="multipart/form-data" class="cleanform">
        <input id="file" type="file" name="file" />
        <p><button type="submit">Upload</button></p>        
    </form>

另请注意,通过将参数类型更改为

,针对接口进行编程总是更好
public ModelAndView upload(@RequestParam("file") MultipartFile file) {

您将委托将实现注入框架。好处是您可以使用 spring mvc 测试框架编写文件上传测试,在这种情况下,框架将为 MultipartFile 接口

插入模拟实现