一、导入依赖
<!-- 文件上传包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- io包 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
二、编写提交表单
在表单中添加enctype="multipart/form-data"
属性值
encodetype:编码类型
multipart/form-data是指表单数据有多部分构成 既有文本数据 又有文件等二进制数据
默认情况下enctype的值是application/x-www-form-urlencoded 不能用于文件上传 只有使用了multipart/form-data才能完整传递文件数据
application/x-www-form-urlencoded
:只能上传文本格式的文件
multipart/form-data
:将文件以二进制的形式上传 可以上传多种格式的文件
三、配置SpringMVC配置文件
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 手动指定文件的信息 -->
<!-- 默认编码 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 最大上传大小 单位:kb -->
<property name="maxUploadSize" value="10240000"/>
<!-- uploadTempDir虚拟地址 需要上传文件的时候必须配置该属性 -->
<!--<property name="uploadTempDir"/>-->
</bean>
四、配置文件上传的Controller控制器
以上传图片为例
// 用常量保存路径
private static final String UPLOAD_PATH="F:\\IdeaProjects\\filetest\\";
@RequestMapping("/uploadPic.do")
public ModelAndView uploadPic(MultipartFile uploadPic) throws IOException {
// 用UUID生成随机文件名
UUID uuid=UUID.randomUUID();
long id = uuid.getLeastSignificantBits();
// 获取图片名称
String filename = uploadPic.getOriginalFilename();
// 获取后缀名
String suffix = filename.substring(filename.lastIndexOf("."));
// 文件在服务器上的存储位置
// File(文件地址+文件名+后缀名) 绝对路径 精确到图片名称
File file=new File(UPLOAD_PATH+id+suffix);
uploadPic.transferTo(file);
// 页面的跳转 文件地址的回显
return new ModelAndView("upload","upload_file_path",file.getName());
}
至此 一个最基本的文件上传功能就实现了
当然 实际开发中还远远不止如此 后端还会将文件路径存储于数据库中 在前端也会进行优化 比如实现预览功能 如果是图片的话还会有图片尺寸调节功能等等