文件上传的必要前提
- form表单的enctype取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencode)
enctype: 是表单请求正文的类型
- method属性取值必须是Post
- 提供一个文件选择域<input type=”file” />
前端代码:
<form action="user/fileUpload1" method="post" enctype="multipart/form-data">
选择文件<input type="file" name="upload"><br/>
<input type="submit" value="上传">
</form>
后端代码:
/**
* 文件上传之传统方式
* @return
*/
@RequestMapping("/fileUpload1")
public String fileUpload1(HttpServletRequest request) throws Exception {
System.out.println("文件上传....");
//使用fileupload组件完成文件上传
//上传位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断,该路径是否存在
File file= new File(path);
if(!file.exists()){
//创建文件夹
file.mkdirs();
}
//解析request对象,获取上传文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
List<FileItem> items = upload.parseRequest(request);//全部都是文件项
//遍历
for(FileItem item : items){
//进行判断,当前item对象是否是上传文件项
if(item.isFormField()){
//说明是普通表单项
} else {
//说明是上传文件项
//获取上传文件的名称
String filename = item.getName();
//把文件的名称设置唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
//完成文件上传
item.write(new File(path, filename));
//删除临时文件
item.delete();
}
}
return "success";
}
需要引入的坐标:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>