SpringMVC详细教程
SPRING MVC 上传文件
配置web.xml允许访问*.jpg
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <!-- 表示允许访问*.jpg。 -->
为什么要加这一段呢? 因为配置springmvc的servlet的时候,使用的路径是”/”,导致静态资源在默认情况下不能访问,所以要加上这一段,允许访问jpg。 并且必须加在springmvc的servlet之前
如果你配置spring-mvc使用的路径是/*.do,就不会有这个问题了。配置springmvc-servlet.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> <!-- 开放对上传功能的支持代码比较 复制代码 -->
upload.jsp 上传页面
<form action="uploadImage" method="post" enctype="multipart/form-data"> 选择图片:<input type="file" name="image" accept="image/*"><br> <input type="submit" value="上传"> </form>
上传页面,需要注意的是form 的两个属性必须提供method=”post” 和 enctype=”multipart/form-data” 缺一不可
enctype属性:
application/x-www-form-urlencoded在发送前编码所有字符(默认)(空格被编码为 ‘+’,特殊字符被编码为ASCII十六进制字符)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为“+”加号,但不对特殊字符编码。
上传组件 增加一个属性 accept=”image/*” 表示只能选择图片进行上传准备UploadedImageFile
封装MultipartFile类型的字段 image ,用于接受页面的注入
public class UploadedImageFile { MultipartFile image; public MultipartFile getImage() { return image; } public void setImage(MultipartFile image) { this.image = image; } }
UploadController 上传控制器
准备方法upload 映射上传路径/uploadImage@Controller public class UploadController { @RequestMapping("/uploadImage") public ModelAndView upload(HttpServletRequest request, UploadedImageFile file) throws IllegalStateException, IOException { // 参数UploadedImageFile 中已经注入好了 image String name = RandomStringUtils.randomAlphanumeric(10); // 通过 RandomStringUtils.randomAlphanumeric(10);获取一个随机文件名。 // 因为用户可能上传相同文件名的文件,为了不覆盖原来的文件,通过随机文件名的办法来规避 String newFileName = name + ".jpg"; File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName); // 根据request.getServletContext().getRealPath 获取到web目录下的image目录,用于存放上传后的文件。 newFile.getParentFile().mkdirs(); file.getImage().transferTo(newFile); // 调用file.getImage().transferTo(newFile); 复制文件 ModelAndView mav = new ModelAndView("showUploadedFile"); mav.addObject("imageName", newFileName); // 把生成的随机文件名提交给视图,用于后续的显示 return mav; } }
showUploadedFile.jsp 显示图片的页面
<img src="image/${imageName}"/>
测试。