文件上传时会以multipart的形式上传,表单中每一部分都单独作为一个part,每个输入域对应一个part。spring处理此类型的数据时需要配置一个multipart解析器,告诉dispatcherServlet如何读取multipart请求。dispatcherServlet将此功能委托给了multipartResolver策略接口实现。spring3.1开始提供了两个解析器:CommonsMultipartResolver(适用于servlet3.0及以后版本),StandarServletMultipartResolver(使用servlet提供的功能,不依赖其他项目,始于spring3.1)。我们需要在web.xml或servlet初始化部分将multipart的具体细节作为dispatcherServlet的一部分。表单中需要指定enctype="multipart/form-data"
此处使用CommonsMultipartResolver,需要导入jar包commons-fileupload-1.2.2.jar、commons-io-2.2.jar
示例代码:
xml中配置multipart解析器
页面指定提交数据的方式:method="post", enctype="multipart/form-data"
控制器处理具体事物:
通过控制器跳转到祖册页面;
MultipartFile:图片文件对象(此处上传的图片)
FileUtils.copyInputStreamToFile(mf.getInputStream(), file);第一个参数为图片对象的文件名,第二个为指定的存储路径
千万不要配置错误名字:报错The current request is not a multipart request。找了好长时间才发现
静态资源访问:
springmvc3.0中请求静态资源如js、css、图片需要在web.xml中配置default-servlet mapping,使用tomcat默认的映射路径,绕开springmvc控制器。