中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

SpringBoot | 第十七章:web 應(yīng)用開(kāi)發(fā)之文件上傳

2018-09-12    來(lái)源:importnew

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

前言

上一章節(jié),我們講解了利用模版引擎實(shí)現(xiàn)前端頁(yè)面渲染,從而實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的功能,同時(shí)也提出了兼容jsp項(xiàng)目的解決方案。既然開(kāi)始講解web開(kāi)發(fā)了,我們就接著繼續(xù)往web這個(gè)方向繼續(xù)吧。通常,我們?cè)谧?code>web開(kāi)發(fā)時(shí),碰見(jiàn)諸如附件上傳、圖片頭像上傳等文件的上傳需求也是再正常不過(guò)的。那么,我們今天我們就來(lái)講講SpringBoot文件上傳的功能的實(shí)現(xiàn)。

一點(diǎn)知識(shí)

我們知道,前端上傳文件時(shí),最常見(jiàn)的就是利用Form表單的方式進(jìn)行文件的上傳功能了,上傳時(shí)設(shè)置enctypemultipart/form-data,或者直接利用jquery的一些上傳插件實(shí)現(xiàn)。而后端,在jsp+Servlet時(shí)代,最常見(jiàn)的就是利用smartupload上傳組件。而在SpringMvc時(shí)代,其提供了MultipartFile封裝類(lèi),它包含了文件的二進(jìn)制流和文件相關(guān)屬性(文件名、大小等)。所以在SpringBoot中也是使用此封裝類(lèi)進(jìn)行文件上傳的。

文件上傳

上面說(shuō)到,springmvc中是利用MultipartFile進(jìn)行文件上傳的。而MultipartFile是個(gè)接口類(lèi),它的實(shí)現(xiàn)類(lèi)有CommonsMultipartFileStandardMultipartFile。這里簡(jiǎn)單說(shuō)明下:


StandardMultipartFile:是基于j2ee自帶的文件上傳進(jìn)行解析,即使用Servlet3.0提供的javax.servlet.http.Part上傳方式。

CommonsMultipartFile:是基于apache fileupload的解析。


所以正常我們使用時(shí),也是無(wú)需關(guān)系底層是以哪種方式進(jìn)行文件上傳處理的,SpringMvc會(huì)給我們做相應(yīng)的轉(zhuǎn)換的。

這里演示下兩種方式。

基于J2EE自帶方式

這種方式下,其實(shí)無(wú)需任何配置。只需按正常的web開(kāi)發(fā)項(xiàng)目集成即可。

0.pom依賴(lài)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

1.配置文件(可選),正常只需要設(shè)置上傳的文件大小

# 最大支持文件大小 即單個(gè)文件大小
spring.http.multipart.max-file-size=1Mb
# 最大支持請(qǐng)求大小 即一次性上傳的總文件大小
spring.http.multipart.max-request-size=10Mb

其他的配置,可直接參考官網(wǎng)的配置信息:https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/#common-application-properties
其他配置

2.編寫(xiě)控制類(lèi)

FileUploadController.java:

@RestController
@Slf4j
public class FileUploadController {

	@PostMapping("/upload")
	public String upload(@RequestParam MultipartFile file) throws IllegalStateException, IOException {
		// 判斷是否為空文件
		if (file.isEmpty()) {
			return "上傳文件不能為空";
		}
		// 文件類(lèi)型
		String contentType = file.getContentType();
		// springmvc處理后的文件名
		String fileName = file.getName();
		log.info("服務(wù)器文件名:" + fileName);
		// 原文件名即上傳的文件名
		String origFileName = file.getOriginalFilename();
		// 文件大小
		Long fileSize = file.getSize();

		// 保存文件
		// 可以使用二進(jìn)制流直接保存
		// 這里直接使用transferTo
		file.transferTo(new File("d://okong-" + origFileName));

		return String.format(file.getClass().getName() + "方式文件上傳成功!\n文件名:%s,文件類(lèi)型:%s,文件大小:%s", origFileName, contentType,fileSize);

	}
}

3.啟動(dòng)應(yīng)用,然后使用postman進(jìn)行api調(diào)用即可,當(dāng)然大家也可以利用上節(jié)課學(xué)習(xí)的模版引擎技術(shù),編寫(xiě)一個(gè)文件上傳的表單。

J2EE方式

基于FileUpload包方式

原來(lái)在Springmvc時(shí),我們通常都是使用CommonsMultipartResolver進(jìn)行文件上傳處理類(lèi)配置的,比如最大上傳文件大小的。而基于在SpringBoot下,略微有些不同。

0.pom加入fileUpload依賴(lài)

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.3</version>
</dependency>

1.編寫(xiě)一個(gè)配置類(lèi)
FileUploadConfig.java

@Configuration
public class FileUploadConfig {
	
	@Bean
	public MultipartResolver custom() {
		return new CommonsMultipartResolver();
	}
}

2.由于spring.http.multipart.enabled默認(rèn)是true,所以加載類(lèi)MultipartAutoConfiguration會(huì)自動(dòng)加載,這樣fileUpload就會(huì)異常了。所以正常有兩種方式:在啟動(dòng)類(lèi)下將此配置類(lèi)不進(jìn)行自動(dòng)加載

@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})

另一種就是,直接設(shè)置spring.http.multipart.enabledfalse。
本示例為了兩種可切換,使用的是第二種。

3.編寫(xiě)控制層:這個(gè)和J2EE的方式是一樣的,這里就不貼了。
4.啟動(dòng)應(yīng)用,使用postman訪問(wèn)下:

fileupload

相關(guān)資料

  1. https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/

總結(jié)

本章節(jié)主要是講解了兩種方式來(lái)進(jìn)行文件的上傳功能。這里就簡(jiǎn)單的介紹了兩種方式的相關(guān)配置和一些注意點(diǎn),像文件大小過(guò)大時(shí)進(jìn)行異常捕獲,大家可以使用全局異常類(lèi)來(lái)進(jìn)行捕獲,只需捕獲MultipartException異常即可,這里就示例了,相對(duì)來(lái)說(shuō)比較簡(jiǎn)單了。

最后

目前互聯(lián)網(wǎng)上很多大佬都有SpringBoot系列教程,如有雷同,請(qǐng)多多包涵了。本文是作者在電腦前一字一句敲的,每一步都是實(shí)踐的。若文中有所錯(cuò)誤之處,還望提出,謝謝。

標(biāo)簽: 服務(wù)器 互聯(lián)網(wǎng)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:SpringBoot | 第十八章:web 應(yīng)用開(kāi)發(fā)之WebJars 使用

下一篇:Map 大家族的那點(diǎn)事兒 ( 7 ) :ConcurrentHashMap