深入理解MultipartFile,以更優雅的方式處理文件

   Hello,大家好,我是Steafan_,這幾天有時間我就來更新博客了,話不多說直入正題。

  在Java中處理文件向來是一種不是很方便的操作,然後隨着Spring框架的崛起,使用Spring框架中的MultipartFile來處理文件也是件很方便的事了,今天就爲大家帶來剖析MultipartFile的神祕面紗。MultipartFile本身並沒有很複雜的結構,也正是他強力封裝了很多便捷的api才引來很多人的使用。

一、概述

    MultipartFile爲org.springframework.web.mutipart包下的一個類,也就是說如果想使用MultipartFile這個類就必須引入spring框架,換句話說,如果想在項目中使用MultipartFile這個類,那麼項目必須要使用spring框架纔可以,否則無法引入這個類。MultipartFile翻譯成中文來講就是“多組件的文檔”,不用太在乎他的中文含義,一般來講使用MultipartFile這個類主要是來實現以表單的形式進行文件上傳功能。

二、理解什麼是MultipartFile

    要想真正理解什麼是MultipartFile,我們就需要從源碼角度進行分析和理解。接下來我將一步一步對MultipartFile進行源碼解讀,這可以使得我們更系統的理解MultipartFile。

1、MultipartFile類的註釋說明

      MultipartFile類的註釋說明截圖如下圖1.1所示:

      

 

                                                                                     圖1.1 MultipartFile註釋說明

      第一句:一種可以接收使用多種請求方式來進行上傳文件的代表形式。也就是說,如果你想用spring框架來實現項目中的文件上傳功能,則MultipartFile可能是最合適的選擇,而這裏提到的多種請求方式則可以通俗理解爲以表單的形式提交。

      第二句:這個文件內容可以存儲到內存中或者存儲在磁盤的臨時位置上。

      第三句:無論發生哪種情況,用戶都可以自由地拷貝文件內容到session存儲中,或者以一種永久存儲的形式進行存儲,如果有需要的話。

      第四句:這種臨時性的存儲在請求結束之後將會被清除掉。

2、MultipartFile常用方法解析

      首先MultipartFile是一個接口,並繼承自InputStreamSource,且在InputStreamSource接口中封裝了getInputStream方法,該方法的返回類型爲InputStream類型,這也就是爲什麼MultipartFile文件可以轉換爲輸入流。通過以下代碼即可將MultipartFile格式的文件轉換爲輸入流。

multipartFile.getInputStream();

  (1)、getName方法

          getName方法獲取的是前後端約定的傳入文件的參數的名稱,在SpringBoot後臺中則是通過@Param("uploadFile") 註解定義的內容。值得一提的是,我們來看一下該方法的註釋,如下圖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方法用來獲取文件的大小,單位是字節。

 (6)、getBytes方法 

         getBytes方法用來將文件轉換成一種字節數組的方式進行傳輸,會拋出IOException異常。

 (7)、getInputStream方法 

         getInputStream方法用來將文件轉換成輸入流的形式來傳輸文件,會拋出IOException異常。

 (8)、transferTo方法 

         transferTo方法用來將接收文件傳輸到給定目標路徑,會拋出IOException、IllegalStateException異常。該方法在實際項目開發中使用較少。

         我們以上傳一張圖片文件爲例,分別來看一下調用不同方法所獲取到的數據,如下圖2.2所示:

                                                                 

                                                             圖2.2 MultipartFile常用方法獲取數據打印結果

三、MultipartFile的一些使用技巧

    (1)我們在使用MultipartFile作爲參數傳遞的時候,可以將MultipartFile聲明爲一個數組,這樣就能支持多文件傳輸,如果只需要傳輸一個文件,則去掉數組就好了。

    (2)可以根據MultipartFile的getSize方法來獲取到傳輸文件的大小,這樣就能限定傳輸過來的文件的大小了。

可以在我的github中看到MultipartFile的實戰代碼:https://github.com/SteafanMrZhou/springBootPractice  

以上就是本篇博文的全部內容,有不懂的地方歡迎留言評論,感謝各位朋友關注!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章