1: Introduction au téléchargement de fichiers springMVC
Parmi les 9 composants principaux de springMVC , l'un d'entre eux est MultipartResolver
le composant d'analyse de téléchargement de fichier. Lorsque le composant est une demande de téléchargement de fichier, la classe HttpServletRequest sera analysée et générée en tant que classe MultipartHttpServletRequest. Cette classe hérite de HttpServletRequest tout en implémentant également le MultipartRequest
code source de l' interface est la suivante:
public interface MultipartRequest {
Iterator<String> getFileNames();
@Nullable
MultipartFile getFile(String name);
List<MultipartFile> getFiles(String name);
Map<String, MultipartFile> getFileMap();
MultiValueMap<String, MultipartFile> getMultiFileMap();
@Nullable
String getMultipartContentType(String paramOrFileName);
}
Vous pouvez voir qu'il existe de nombreuses méthodes liées aux fichiers définies dans l'interface, donc MultipartHttpServletRequest l'a 操作文件的能力
. Pour l'interface MultipartResolver, il existe deux classes d'implémentation, l'une est CommonMultipartResolver
, l'autre est StandardServletMultipartResolver
, car la première doit s'appuyer sur le package tiers d'apache, et la seconde n'a besoin que de l'API servlet, donc en utilisation réelle, StandardMultipartResolver est utilisé Suite. Par conséquent, pour terminer l'opération de téléchargement de fichier, tant qu'il est capable de créer un StandardMultipartResolver, et dans springboot, lorsque l'analyseur de fichier de téléchargement n'est pas spécifié, c'est le StandardMultipartResolver qui est créé. Le code source créé automatiquement est le suivant:
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({
Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class })
@ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true)
@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {
@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
@ConditionalOnMissingBean(MultipartResolver.class)
public StandardServletMultipartResolver multipartResolver() {
StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
return multipartResolver;
}
}
2: Configurer les paramètres du fichier de téléchargement
### 配置springboot自动生成StandardMultipartResolver对象设置开始 ###
# 指定文件上传文件夹
spring.servlet.multipart.location=/Users/xb/Desktop/D/dongsir-dev/test-jsp-in-springboot
# 限制单个文件的大小 5M
spring.servlet.multipart.max-file-size=5242880
# 限制所有文件的最大大小
spring.servlet.multipart.max-request-size=20MB
### 配置springboot自动生成StandardMultipartResolver对象设置结束 ###
3 : jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="post" action="./request" enctype="multipart/form-data">
<input type="file" name="file" value="请选择要上传文件">
<input type="submit" value="提交">
</form>
</body>
</html>
4: interface Jump jsp
@RequestMapping("/upload/page")
public String uploadPage() {
return "upload";
}
5: demande de téléchargement d'interface
HttpServletRequest est utilisé directement comme paramètre ici, et vous pouvez également utiliser la méthode de javax.servlet.http.Part
passage direct write
. Il s'agit de l'interface fournie dans l'API de servlet, et vous pouvez également l'utiliser org.springframework.web.multipart.MultipartFile
. Ceci est fourni par spring. Cette transfterTo
méthode peut être utilisée directement . Le code source est le suivant:
@RequestMapping("/upload/request")
public Map<String, Object> uploadRequest(HttpServletRequest request) {
Map<String, Object> res = new HashMap<>();
MultipartHttpServletRequest multipartHttpServletReq = null;
if (request instanceof MultipartHttpServletRequest) {
multipartHttpServletReq = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartHttpServletReq.getFile("file");
String originalFilename = multipartFile.getOriginalFilename();
res.put("上传文件名", originalFilename);
res.put("上传结果", "成功");
try {
File file = new File(originalFilename);
multipartFile.transferTo(file);
} catch (Exception e) {
}
return res;
} else {
res.put("result", "不是文件上传请求");
return res;
}
}
6: test de téléchargement
Visitez simplement et http://localhost:8089/testBean/upload/page
sélectionnez le fichier à télécharger.