1.multipart请求
普通表单提交的是文本类型的数据,但视频、图片文件不是文本类型;此时需要使用 multipart 请求将表单字段分成相应的块,每个块都有自己的数据类型。对于上传字段对应的块,数据类型就可以是二进制。
2.配置 multipart resovler
在Servlet3.0 + Spring 3.1+的环境里可以使用StandardServletMultipartResolver 来解析multipart 请求。
在spring mvc 的配置文件中配置 StandardServletMultipartResolver Bean
<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver"></bean>
由于 StandardServletMultipartResolver需要依赖Servlet3.0, 所以需要在 web.xml里的DispatchServlet 中配置
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<location></location>
<max-file-size>5245</max-file-size>
<max-request-size>44243</max-request-size>
</multipart-config>
</servlet>
location:上传文件将被存储的目录位置
max-file-size:上传文件的最大大小限制
max-request-size: multipart/form-data 请求的最大大小限制
3.Controller
package com.iran.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
/**
* @Author Tang
* @Date 2021/10/4 9:28
* TO DO 文件上传
*/
@Controller
public class UploadController {
@RequestMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("username") String username) {
System.out.println(username);
if (!file.isEmpty()) {
// 文件存放的位置
String root = "///";
File fileRoot = new File(root);
if (!fileRoot.exists()) {
fileRoot.mkdir();
}
String uploadFile = root + file.getOriginalFilename();
File file1 = new File(uploadFile);
try {
file.transferTo(file1);
} catch (IOException e) {
e.printStackTrace();
}
}
return "success";
}
}
4.页面
<%--
Created by IntelliJ IDEA.
User: 糖人
Date: 2021/10/4
Time: 9:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"/>
<br/>
<br/>
文件上传:<input type="file" name="file" />
<br/>
<br/>
<button type="submit" id="updload">上传</button>
</form>
</body>
</html>
注意必须声明:enctype=“multipart/form-data”