【问题标题】:MultipartForm handling with Spring使用 Spring 处理 MultipartForm
【发布时间】:2012-09-14 10:47:58
【问题描述】:

此代码是处理上传的 RestEasy 代码:

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

有没有类似的使用Spring可以像这样处理MultipartForm

【问题讨论】:

    标签: java spring resteasy


    【解决方案1】:

    Spring 包含一个依赖于 commons-fileupload 的 multipartresolver,因此要使用它,您必须将它包含在您的构建中。

    在您的 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
        // ...
    }
    

    【讨论】:

    • MutipartFile 具有从请求中自动解析的 'path' 和 'id' 属性?
    • 如果您指的是客户端计算机上文件的路径和输入标签的“id”属性,那么没有。这些根本不会发送到服务器。
    • 好的...我会试试这个,希望它适用于 App Engine。
    • 做了一个小修改 - 使用 @RequestParam 而不是 @ModelAttribute
    【解决方案2】:

    这是一个示例,展示了如何使用 MVC 注释在 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

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2021-12-17
      • 1970-01-01
      • 2022-01-20
      • 2016-11-28
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多