一、添加依赖
上传文件所需要的jar包,在maven项目下只需要添加依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
二、编写代码
index.jsp:
注意此处的文件表单的name=“upload”
,和下面的文件解析器对象名称要相同
<form action="upload/testUpload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
uploadController:
第二个参数MultipartFile的形参upload,对应的是文件表单的name属性。
一定要相同
@Controller
@RequestMapping("upload")
public class uploadController {
@RequestMapping("testUpload")
public String testUpload(HttpServletRequest request, MultipartFile upload) throws IOException {
System.out.println("testUpload方法执行了");
//获取服务器路径,存入下面的upload子文件夹下
String path = request.getSession().getServletContext().getRealPath("/upload");
//根据目录新建这个文件夹
File file = new File(path);
//如果该文件夹不存在,创建该文件夹
if (!file.exists()){
file.mkdir();
}
//获取解析后该文件的文件名
String fileName = upload.getOriginalFilename();
//获取一个唯一指定的UUID,防止出现重复
String uuid = UUID.randomUUID().toString().replace("-","").trim();
fileName = uuid + "_" + fileName;
//上传文件
upload.transferTo(new File(path,fileName));
//为了看看上传后的路径和文件名
System.out.println(path);
System.out.println(fileName);
//执行成功则转向success.jsp页面
return "success";
}
}
三、配置文件解析器对象
文件解析器对象的id必须要是multipartResolver。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--指定最大的上传大小,value以B为单位,如10M就是10*1024KB*1024B-->
<property name="maxUploadSize" value="10485760"></property>
<!--文件的默认编码-->
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
运行结果:
上传了两次名为数据库属性的图片,可以看到由于唯一的uuid,所以不会出现覆盖的情况。