1.文件上传功能需求:
通过jsp选择文件目录,点击保存到数据库(文件名)。
2.原理:使用Fileupload进行文件上传,springmvc建立文件的虚拟目录,也就是本地磁盘上,用于存放临时文件,这个临时文件是在做文件上传的时候,
通过uuid随机生成文件名(避免文件重复),然后通过MultipartFile 对象的transferTo,将文件内容写入到创建好的临时文件中,将文件名保存到数据库,完成文件上传。
3.实现步骤:
①首先页面jsp 提供form表单,form表单的要求是:enctype="multipart/form-data" method=“post” 。
②上传的input <input type="file" name="pictureFile">
③配置使用Tomcat创建虚拟目录,用于存放临时上传文件,保存文件在本地磁盘,当访问文件只需要路径就可以读取该文件。
Tomcat配置虚拟目录步骤:
④在springmvc.xml中配置文件上传表单的multipart解析器,目的是:
①检查当前 Web 请求是否为 multipart类型
②设定文件的encodingtype
③设定上传文件的大小
关于multipartResolver的原理,详细请见:http://exceptioneye.iteye.com/blog/1314958
配置如下:
<!-- 配置文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 文件上传最大5M -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
⑤springmvc的参数绑定,设置handler(方法)的形参需要是:MultipartFile pictureFile 形参名必须是与input中的name保持一致
a.取上传文件的文件名:String filename = pictureFile.getOriginalFilename();
b.新建一个文件作为临时文件存到Tomcat指定的虚拟目录
//设置新文件名称,通过uuid
int lastIndexOf = filename.lastIndexOf(".");
String newFileName = null;
if(null != filename && lastIndexOf != -1){
newFileName = UUID.randomUUID().toString() + filename.substring(lastIndexOf);
}
E:/springmvcFileUpLoad/temp/ 注:该路径为指定的Tomcat的虚拟目录,filePath为 根据当前时间建立的文件夹,newFileName为新建的文件名包含后缀。
String filePath=new SimpleDateFormat("yy/MM/dd").format(new Date()).toString();
File uploadPic = new File("E:/springmvcFileUpLoad/temp/"+ filePath + newFileName);
if(!uploadPic.exists()){
uploadPic.mkdirs();
}
c.将上传文件的内容拷贝到临时文件。
pictureFile.transferTo(uploadPic);
d.保存文件路径到数据库。