Spring中的MultipartFile詳解
前言
在Java中處理文件向來(lái)是一種不是很方便的操作,然后隨著Spring框架的崛起,使用Spring框架中的MultipartFile來(lái)處理文件也是件很方便的事了,今天就為大家?guī)?lái)剖析MultipartFile的神秘面紗。MultipartFile本身并沒(méi)有很復(fù)雜的結(jié)構(gòu),也正是他強(qiáng)力封裝了很多便捷的api才引來(lái)很多人的使用。
一、概述
MultipartFile為org.springframework.web.mutipart包下的一個(gè)類(lèi),也就是說(shuō)如果想使用MultipartFile這個(gè)類(lèi)就必須引入spring框架,換句話說(shuō),如果想在項(xiàng)目中使用MultipartFile這個(gè)類(lèi),那么項(xiàng)目必須要使用spring框架才可以,否則無(wú)法引入這個(gè)類(lèi)。MultipartFile翻譯成中文來(lái)講就是“多組件的文檔”,不用太在乎他的中文含義,一般來(lái)講使用MultipartFile這個(gè)類(lèi)主要是來(lái)實(shí)現(xiàn)以表單的形式進(jìn)行文件上傳功能。
二、理解什么是MultipartFile
要想真正理解什么是MultipartFile,我們就需要從源碼角度進(jìn)行分析和理解。接下來(lái)我將一步一步對(duì)MultipartFile進(jìn)行源碼解讀,這可以使得我們更系統(tǒng)的理解MultipartFile。
1、MultipartFile類(lèi)的注釋說(shuō)明
MultipartFile類(lèi)的注釋說(shuō)明截圖如下圖1.1所示:
圖1.1 MultipartFile注釋說(shuō)明
第一句:一種可以接收使用多種請(qǐng)求方式來(lái)進(jìn)行上傳文件的代表形式。也就是說(shuō),如果你想用spring框架來(lái)實(shí)現(xiàn)項(xiàng)目中的文件上傳功能,則MultipartFile可能是最合適的選擇,而這里提到的多種請(qǐng)求方式則可以通俗理解為以表單的形式提交。
第二句:這個(gè)文件內(nèi)容可以存儲(chǔ)到內(nèi)存中或者存儲(chǔ)在磁盤(pán)的臨時(shí)位置上。
第三句:無(wú)論發(fā)生哪種情況,用戶都可以自由地拷貝文件內(nèi)容到session存儲(chǔ)中,或者以一種永久存儲(chǔ)的形式進(jìn)行存儲(chǔ),如果有需要的話。 第四句:這種臨時(shí)性的存儲(chǔ)在請(qǐng)求結(jié)束之后將會(huì)被清除掉。
2、MultipartFile常用方法解析
首先MultipartFile是一個(gè)接口,并繼承自InputStreamSource,且在InputStreamSource接口中封裝了getInputStream方法,該方法的返回類(lèi)型為InputStream類(lèi)型,這也就是為什么MultipartFile文件可以轉(zhuǎn)換為輸入流。通過(guò)以下代碼即可將MultipartFile格式的文件轉(zhuǎn)換為輸入流。
multipartFile.getInputStream();
(1)、getName方法
getName方法獲取的是前后端約定的傳入文件的參數(shù)的名稱(chēng),在SpringBoot后臺(tái)中則是通過(guò)@Param(“uploadFile”) 注解定義的內(nèi)容。值得一提的是,我們來(lái)看一下該方法的注釋?zhuān)缦聢D2.1所示:
圖2.1 getName方法源碼截圖
從上圖的return中可以看出,返回的name值從來(lái)不是null或者空,也就是說(shuō)如果使用MultipartFile來(lái)接收文件,那么@Param(“uploadFile”)定義的接收文件的名稱(chēng)則必不可少,這樣才能接收到文件,如果沒(méi)有定義@Param(“uploadFile”),則接收不到文件。
(2)、getOriginalFileName方法
getOriginalFileName方法獲取的是文件的完整名稱(chēng),包括文件名稱(chēng)+文件拓展名。
(3)、getContentType方法
getContentType方法獲取的是文件的類(lèi)型,注意是文件的類(lèi)型,不是文件的拓展名。
(4)、isEmpty方法
isEmpty方法用來(lái)判斷傳入的文件是否為空,如果為空則表示沒(méi)有傳入任何文件。
(5)、getSize方法
getSize方法用來(lái)獲取文件的大小,單位是字節(jié)。
(6)、getBytes方法
getBytes方法用來(lái)將文件轉(zhuǎn)換成一種字節(jié)數(shù)組的方式進(jìn)行傳輸,會(huì)拋出IOException異常。
(7)、getInputStream方法
getInputStream方法用來(lái)將文件轉(zhuǎn)換成輸入流的形式來(lái)傳輸文件,會(huì)拋出IOException異常。
(8)、transferTo方法
transferTo方法用來(lái)將接收文件傳輸?shù)浇o定目標(biāo)路徑,會(huì)拋出IOException、IllegalStateException異常。該方法在實(shí)際項(xiàng)目開(kāi)發(fā)中使用較少。文件上傳主要是用這個(gè)方法實(shí)現(xiàn)!
到此這篇關(guān)于Spring中的MultipartFile詳解的文章就介紹到這了,更多相關(guān)MultipartFile詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot MultipartFile文件上傳與下載的實(shí)現(xiàn)示例
- Springboot?上傳文件或頭像(MultipartFile、transferTo)
- SpringMVC中MultipartFile轉(zhuǎn)File的兩種方式
- springcloud如何使用Feign后臺(tái)內(nèi)部傳遞MultipartFile
- SpringBoot 利用MultipartFile上傳本地圖片生成圖片鏈接的實(shí)現(xiàn)方法
- 關(guān)于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務(wù)傳輸?shù)膯?wèn)題
相關(guān)文章
詳解java中的深拷貝和淺拷貝(clone()方法的重寫(xiě)、使用序列化實(shí)現(xiàn)真正的深拷貝)
這篇文章主要介紹了java中的深拷貝和淺拷貝(clone()方法的重寫(xiě)、使用序列化實(shí)現(xiàn)真正的深拷貝),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03實(shí)現(xiàn)了基于TCP的Java Socket編程實(shí)例代碼
這篇文章主要介紹了基于TCP的Java Socket編程實(shí)例代碼,有需要的朋友可以參考一下2013-12-12springboot之Validation參數(shù)校驗(yàn)詳細(xì)解讀
這篇文章主要介紹了springboot之Validation參數(shù)校驗(yàn)詳細(xì)解讀,本篇是關(guān)于springboot的參數(shù)校驗(yàn)知識(shí),當(dāng)然也適用其它java應(yīng)用,讀完本篇將學(xué)會(huì)基本的參數(shù)校驗(yàn),自定義參數(shù)校驗(yàn)和分組參數(shù)校驗(yàn),需要的朋友可以參考下2023-10-10