1:springMVCファイルアップロードの概要
springMVCの9つの主要コンポーネントのうち、1つはMultipartResolver
ファイルアップロード解析コンポーネントです。コンポーネントがファイルアップロードリクエストの場合、HttpServletRequestクラスが解析され、MultipartHttpServletRequestクラスとして生成されます。このクラスはHttpServletRequestを継承し、MultipartRequest
ソースコードも実装します。インターフェイスの概要は次のとおりです。
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);
}
インターフェイスで定義されているファイル関連のメソッドが多数あることがわかるので、MultipartHttpServletRequestにそれがあり操作文件的能力
ます。MultipartResolverインターフェースの場合、2つの実装クラスがあります。1つは、、もう1つはですCommonMultipartResolver
。StandardServletMultipartResolver
前者はapacheのサードパーティパッケージに依存する必要があり、後者はサーブレットAPIのみを必要とするため、実際の使用ではStandardMultipartResolverが使用されます。もっと。したがって、ファイルのアップロード操作を完了するには、StandardMultipartResolverを作成できる限り、springbootで、アップロードファイルパーサーが指定されていない場合、作成されるのはStandardMultipartResolverです。自動的に作成されるソースコードは次のとおりです。
@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:アップロードファイルのパラメーターを構成する
### 配置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:ジャンプjspインターフェース
@RequestMapping("/upload/page")
public String uploadPage() {
return "upload";
}
5:インターフェースアップロードリクエスト
ここではHttpServletRequestをパラメータとして直接使用しており、javax.servlet.http.Part
ダイレクトパスwrite
メソッドも使用できます。これはサーブレットAPIで提供されるインターフェースであり、使用することもできますorg.springframework.web.multipart.MultipartFile
。これはSpringによって提供されます。このtransfterTo
メソッドは直接使用できます。ソースコードは次のとおりです。
@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:アップロードテスト
http://localhost:8089/testBean/upload/page
アップロードするファイルにアクセスして選択するだけです。