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