注意点一: 前端form表单必须添加 enctype="multipart/form-data"属性,并且使用POST提交
注意点二: 必须在SpringMVC的配置文件中添加上传的支持和相关jar包
<!-- 處理文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf8" /> <!-- 默认编码 (ISO-8859-1) -->
<property name="maxUploadSize" value="-1" /> <!-- 最大文件大小,-1为无限止(-1) -->
</bean>
<!-- 文件上傳jar包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
注意点三: 假如使用的是异步提交表单,需要借助jq.form.js插件(别人写好的插件)进行异步提交或者easyui里面封装好的 表单提交
注意点四: 因为表单加了enctype="multipart/form-data"属性,表单会转化为二进制流的形式进行传输,如果后台用对象 bean的形式进行接受,且前台表单里的file框的name属性是你的对象中的图片的字段名(一般用的String类 型)。如果是这种情况就会报错,因为无法将二进制形式的数据转化为字符串形式,此时应该如何解决 解决:前台的file框的name属性不能用你的对象中那个用来存储图片路径的字段的名称,换一个别的名字,然后 在后台这样进行接受 @RequestParam("file") CommonsMultipartFile file,然后它就不会报错了,然后将上传好的文件的路径在set 进去你那个对象用来保存图片路径的字段里面 上传文件相关的代码: public Map<String, Object> addData(Message message,ModelMap modelMap,@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) throws IllegalStateException, IOException{
System.out.println(message);
System.out.println(file);
long startTime=System.currentTimeMillis();
System.out.println("fileName:"+file.getOriginalFilename());
String path= request.getSession().getServletContext().getRealPath("/")+"upload\\"+new Date().getTime()+file.getOriginalFilename();
System.out.print(path);
File newFile=new File(path);
//通过CommonsMultipartFile的方法直接写文件(注意这个时候)
file.transferTo(newFile);
long endTime=System.currentTimeMillis();
System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
//System.out.println(mesName);
return null;
}