首先给服务器添加一个虚拟目录用来存放图片
在eclipse或者idea中可以使用图形化界面添加,也可以直接修改服务器配置文件
在conf/server.xml文件,添加虚拟目录:
<Context docBase=”E: \develop\upload\temp” path=”/pic” reloadable= =”false”/>
注意:
在图片虚拟目录中,一定将图片目录分级创建(提高i/o性能),一般采用按日期(年、月、日)进行分
级创建
导入文件上传的jar包
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
在springmvc.xml配置文件上传的解析器
id必须存在且必须是multipartResolver
1 2 3 4
| <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5242880"/> </bean>
|
在controller的方法中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public String updateStudent(Model model, @Validated(value={ValidGroup1.class}) Student student, BindingResult bindingResult, //图片被封装在这个对象中 MultipartFile items_pic) throws Exception { ... ...
String originalFilename = items_pic.getOriginalFilename(); if(items_ pic!=nu11 && originalFilename != null && originalFilename.length() > 0){ String pic_path = "E:\\upload\\"; String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf(".")); File newFile = new File(pic_path+newFileName); items_pic.transferTo(newFile); student.setPicture(newFileName); } ...... return "success"; }
|
形参中的MultipartFile变量名必须和表单中的name值保持一致,如果不一致,需要加@ResquestParm()注解
同时上传多个文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| public String fileUpload(MultipartFile[] files, Model model) { String filename1 = files[0].getOriginalFilename(); String filename2 = files[1].getOriginalFilename(); try { files[0].transferTo(new File("d:/",filename1)); files[1].transferTo(new File("d:/",filename2)); model.addAttribute("msg",new String("上传成功")); } catch (IOException e) { model.addAttribute("msg",new String("上传失败")); e.printStackTrace(); } return "index.jsp"; }
|
1 2 3 4 5
| <form action="fileUpload.do" method="post" enctype="multipart/form-data"> <input type="file" name="files"> <input type="file" name="files"> <input type="submit" value="提交"> </form>
|