一、概述
????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.MultipartFile一種可以接收使用多種請求方式來進(jìn)行上傳文件的代表形式浦旱。(如果使用spring框架來實現(xiàn)項目中的文件上傳功能宇色,則MultipartFile是最合適的選擇,而這里提到的多種請求方式則可以通俗理解為以表單的形式提交)颁湖。
2.這個文件內(nèi)容可以存儲到內(nèi)存中或者存儲在磁盤的臨時位置上宣蠕。
3.無論發(fā)生哪種情況,用戶都可以自由地拷貝文件內(nèi)容到session存儲中甥捺,或者以一種永久存儲的形式進(jìn)行存儲抢蚀。
4.這種臨時性的存儲在請求結(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所示:
從上圖的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ā)中使用較少。
????我們以上傳一張圖片文件為例暴氏,分別來看一下調(diào)用不同方法所獲取到的數(shù)據(jù)延塑,如下圖2.2所示:
三、MultipartFile的一些使用技巧
(1)我們在使用MultipartFile作為參數(shù)傳遞的時候答渔,可以將MultipartFile聲明為一個數(shù)組关带,這樣就能支持多文件傳輸,如果只需要傳輸一個文件沼撕,則去掉數(shù)組就好了宋雏。
(2)可以根據(jù)MultipartFile的getSize方法來獲取到傳輸文件的大小芜飘,這樣就能限定傳輸過來的文件的大小了。
可以在我的github中看到MultipartFile的實戰(zhàn)代碼:https://github.com/SteafanMrZhou/springBootPractice
————————————————
版權(quán)聲明:本文為CSDN博主「Steafan_」的原創(chuàng)文章磨总,遵循CC 4.0 BY-SA版權(quán)協(xié)議燃箭,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_36314960/article/details/104775557