springbootでファイルアップロードを使用する

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つはですCommonMultipartResolverStandardServletMultipartResolver前者は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アップロードするファイルにアクセスして選択するだけです。

おすすめ

転載: blog.csdn.net/wang0907/article/details/113095900