代码之家  ›  专栏  ›  技术社区  ›  quarks

使用Spring处理MultipartForm

  •  5
  • quarks  · 技术社区  · 14 年前

    此代码是用于处理上载的RestEasy代码:

    @Path("/fileupload")
    public class UploadService {
        @POST
        @Path("/upload")
        @Consumes("multipart/form-data")
        public Response create(@MultipartForm FileUploadForm form) 
        {
           // Handle form
        }
    }
    

    有没有类似的东西可以使用Spring来处理 MultipartForm 就这样?

    2 回复  |  直到 14 年前
        1
  •  2
  •   pap    14 年前

    Spring includes有一个依赖于 commons-fileupload ,所以要使用它,您必须将其包含在构建中。

    在您的applicationContext.xml中

    <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="<max file size>"/>
    </bean>
    

    在控制器中,使用org.springframework.web.multipart.MultipartFile。

    @RequestMapping(method=RequestMethod.POST, value="/multipartexample")
    public String examplePost(@RequestParam("fileUpload") MultipartFile file){
        // Handle form upload and return a view
        // ...
    }
    
        2
  •  0
  •   Matt    14 年前

    以下是一个示例,展示了如何使用MVC Annotations在Spring中实现类似的功能:

    @RequestMapping(method=RequestMethod.POST, value="/multipartexample")
    public String examplePost(@ModelAttribute("fileUpload") FileUpload fileUpload){
        // Handle form upload and return a view
        // ...
    }
    
    @InitBinder
    public void initBinder(ServletRequestDataBinder binder) {
        binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
    }
    
    public class FileUpload implements Serializable {
        private MultipartFile myFile;
    
        public MultipartFile getMyFile() {
            return myFile;
        }
    
        public void setMyFile(MultipartFile myFile) {
            this.myFile = myFile;
        }
    }
    

    假设文件元素的名称为“myFile”,您应该能够从html表单发布到此端点。您的表单可能如下所示:

    <form:form commandName="fileUpload" id="fileUploadForm" enctype="multipart/form-data">
        <form:input type="file" path="myFile" id="myFile"/>
    </form:form>
    

    @InitBinder代码很重要,因为它指示Spring将文件转换为字节数组,然后可以将其转换为MultipartFile