springmvc文件上传
表单的enctype属性指定的是表单数据的编码方式,该属性有3个值application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的value属性值;multipart/form-data:该编码以二进制流的方式来处理表单身数据,并将文件域指定文件的内容·封装到请求参数里面;text/plain:该编码方式只有当表单的action属性为"mailto"URL的形式时才使用,主要适用于直接通过表单发送文件的情况。
文件上传需要设置表单的enctype属性为multipart/form-data,这样才可以上传文件,为了在后台更方便的获取到文件需要引入commons-fileupload和commons-io。
这两个组件的依赖坐标如下:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
单文件上传
表单页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/user/multiFileUpload" enctype="multipart/form-data">
选择文件:<input type="file" name="uploadfile"> <br>
文件描述:<input type="text" name="name"> <br>
<input type="submit" value="提交">
</form>
</body>
</html>
后台代码
这里通过MultipartFile 对象接收前台传过来的对象,通过MultipartFile 对象的getOriginalFilename()方法可以获取前台上传文件的名称,通过transferTo()方法可以将前台上传的文件保存。
/**
* 单文件上传
* @param username
* @param uploadfile
* @throws IOException
*/
@RequestMapping("/fileload")
@ResponseBody
public void FileUpload(String name, MultipartFile uploadfile) throws IOException {
System.out.println("name:" + name);
System.out.println("uploadfile:" + uploadfile);
String filename = uploadfile.getOriginalFilename();
uploadfile.transferTo(new File("C:\\Users\\DELL\\Desktop\\" + filename));
}
多文件上传
表单页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/user/multiFileUpload" enctype="multipart/form-data">
选择文件:<input type="file" name="uploadfile"> <br>
选择文件:<input type="file" name="uploadfile"> <br>
文件描述2:<input type="text" name="name"> <br>
<input type="submit" value="提交">
</form>
</body>
</html>
后台代码
这里通过MultipartFile数组来接收前台上传的多个文件,然后循环保存文件。
/*
多文件上传
*/
@RequestMapping("/multiFileUpload")
@ResponseBody
public void multipFileUpload(String name, MultipartFile[] uploadfile) throws IOException {
for (MultipartFile file : uploadfile) {
String filename = file.getOriginalFilename();
System.out.println("filename:" + filename);
file.transferTo(new File("C:\\Users\\DELL\\Desktop\\" + filename));
}
}