使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传

springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源。
使用传统方式进行文件上传,需要我们手动解析request对象,获取文件上传项,再进行文件的上传。
springMVC框架可以帮助我们完成对象解析的工作,这大大简化了开发人员文件上传逻辑的编写。

首先,我们需要在springmvc.xml配置文件中配置文件解析器

        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="10485760">property>
        bean>

接着,编写前端代码
enctype="multipart/form-data"不能省略,并且input标签的name属性也是必要的。

<form action="file/doSpringMvcFileUpload" method="post" enctype="multipart/form-data">
    选择文件:<input type="file" name="fileUpload"/>
    <br/>
    <input type="submit" value="上传"/>
form>

最后,编写控制器逻辑

    @RequestMapping("/doSpringMvcFileUpload")
    public  String doSpringMvcFileUpload(HttpServletRequest request,MultipartFile fileUpload) throws Exception {
        //文件上传路径
        String path = request.getSession().getServletContext().getRealPath("/uploads");
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        String fileName = fileUpload.getOriginalFilename();
        String uuid  = UUID.randomUUID().toString();
        fileName = uuid + "-" + fileName;
        fileUpload.transferTo(new File(path,fileName));
        return "uploadSuccess";
    }

整个代码会比使用commons-fileupload实现更简单,文件解析器配置时,还可以指定文件上传的默认地址。值得注意的是,再控制器方法中的MultipartFile fileUpload参数的参数名,必须与前端页面的name值一致,否则,会导致执行错误,文件上传失败。

你可能感兴趣的:(Spring)