欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC实现文件上传

程序员文章站 2022-06-03 10:29:50
...

在Web应用中,用户来上传内容是很常见的需求。

配置multipart解析器
DispatcherServlet没有实现解析multipart请求数据的功能。它将任务委托给MultipartResolver接口的实现,通过实现类来解析multipart请求中的内容。
Spring3.1开始,Spring内置了两个MultipartResolver的实现

CommonsMultipartResolver:使用Commons FileUpload解析multipart
StandardServletMultipartResolver:依赖于Servlet3.0对multipart请求的支持

环境准备,使用CommonsMultipartResolver实现类需要导入jar包
SpringMVC实现文件上传
在springmvc.xml配置CommonsMultipartResolver解析器

<!--id必须为multipartResolver,否则会有Expected 
MultipartHttpServletRequest: is a MultipartResolver configured?-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 请求的编码格式,默认为ISO-8859-1 -->
    <property name="defaultEncoding" value="UTF-8"></property>
    <!-- 文件上传的大小上限,单位字节 -->
    <property name="maxUploadSize" value="5242880"></property>
</bean>

前台上传页面

<form action="${pageContext.request.contextPath }/user/uploadPicture" method="post"
    enctype="multipart/form-data">
    <input type="file" name="userPicture"><br/>
    <input type="submit" value="上传">
</form>

编写后台Controller,使用MultipartFile 接口,来处理multipart

@RequestMapping("uploadPicture")
//userPicture要和前台页面的上传组件name值相同
public String uploadPicture(MultipartFile userPicture) throws Exception{
    if(!userPicture.isEmpty()) {
        String filename = userPicture.getOriginalFilename();
        String filePath = "D://picture";
        userPicture.transferTo(new File(filePath+filename));
        return "/success.jsp";
    }else{
        return "/fail.jsp";
    }
}

MultipartFile 接口API
Spring提供了MultipartFile接口,为处理multipart数据提供了内容更为丰富的API。
SpringMVC实现文件上传