欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring MVC環(huán)境中文件上傳功能的實(shí)現(xiàn)方法詳解

 更新時(shí)間:2017年10月30日 11:07:51   作者:填空之城  
文件上傳是大家應(yīng)該都不陌生的一個(gè)功能,最近在開發(fā)中就又遇到了這個(gè)需求,所以想著總結(jié)一下方便以后需要的時(shí)候參考,下面這篇文章主要給大家介紹了關(guān)于Spring MVC環(huán)境中文件上傳功能的實(shí)現(xiàn)方法,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

     我們?cè)趯?shí)際開發(fā)過程中,尤其是web項(xiàng)目開發(fā),文件上傳和下載的需求的功能非常場景,比如說用戶頭像、商品圖片、郵件附件等等。其實(shí)文件上傳下載的本質(zhì)都是通過流的形式進(jìn)行讀寫操作,而在開發(fā)中不同的框架都會(huì)對(duì)文件上傳和下載有或多或少的封裝,這里就以Spring MVC環(huán)境中文件的上傳為例,講解Spirng MVC環(huán)境下的文件上傳功能實(shí)現(xiàn)。下面話不多說了,來一起看看詳細(xì)的介紹吧。

一、客戶端編程

      由于多數(shù)文件上傳都是通過表單形式提交給后臺(tái)服務(wù)器的,因此,要實(shí)現(xiàn)文件上傳功能,就需要提供一個(gè)文件上傳的表單。同時(shí)該表單必須滿足以下3個(gè)條件:

  • form表單的method屬性設(shè)置為post;
  • form表單的enctype屬性設(shè)置為multipart/form-data
  • 提供<input type="file" name="fileName" />的文件上傳輸入框。

在HTML5之前,如果想要上傳多個(gè)文件,必須使用多個(gè)<input>元素。但是在HTML5中,在<input>元素配置multiple屬性即可進(jìn)行多個(gè)文件的上傳。在HTML5中編寫以下任意一行代碼,便可生成一個(gè)按鈕供選擇多個(gè)文件:

  • <input type="file" name="fileName" multiple />
  • <input type="file" name="images" multiple="multiple" />
  • <input type="file" name="images" multiple="" />

具體代碼示例如下:

<form action="uploadUrl" method="post" enctype="multipart/form-data">
 <input type="file" name="images" multiple="multiple" />
 <input type="submit" value="文件上傳" />
</form>

二、springmvc-config.xml配置文件配置

      當(dāng)客戶端form表單的enctype屬性為multipart/form-data時(shí),瀏覽器就會(huì)采用二進(jìn)制流的方式來處理表單數(shù)據(jù),而對(duì)于文件上傳的處理則涉及在服務(wù)器端解析原始的HTTP請(qǐng)求。Spring MVC為文件上傳提供了直接的支持,這種支持是用即插即用的MultipartResolver實(shí)現(xiàn)的。

在Sring MVC中使用MultipartResolver也非常簡單,只需要在Spring MVC配置文件springmvc-config.xml中定義MultipartResolver接口實(shí)現(xiàn)類即可,示例如下:

<!-- 配置文件上傳類型解析器 multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 <!-- 設(shè)置上傳文件最大尺寸,單位為B -->
 <property name="maxUploadSize" value="5242880" />
</bean>

注意:

由于MultipartResolver實(shí)現(xiàn)類CommonsMultipartResolver內(nèi)部是引用multipartResolver字符串獲取該實(shí)現(xiàn)類對(duì)象并完成文件上傳操作的,所以在配置CommonsMultipartResolver時(shí)必須指定該bean的id為multipartResolver。另外由于MultipartResolver實(shí)現(xiàn)類CommonsMultipartResolver是Spring MVC內(nèi)部通過Apache Commons FileUpload技術(shù)實(shí)現(xiàn)的。因此Spirng MVC的文件上傳還需要依賴Apache Commons FileUpload的組件,即需要導(dǎo)入支持文件上傳和下載的JAR包,具體如下:

  •  commons-fileupload.jar
  •  commons-io.jar

三、后臺(tái)文件下載實(shí)現(xiàn)(MultipartFile接口介紹)

當(dāng)完成上述客戶端代碼的編寫及文件上傳組件的配置后,在Spring MVC中處理已經(jīng)上傳的文件就十分容易了,上傳到Spring MVC程序中的文件會(huì)被封裝到一個(gè)MultipartFile對(duì)象中,然后開發(fā)者通過該對(duì)象的方法就可以進(jìn)行后續(xù)相關(guān)處理了。

編寫后臺(tái)文件上傳控制器類及方法,具體示例如下:

/**
 * 向文件上傳頁面跳轉(zhuǎn)
 */
@RequestMapping("/toFileUpload")
public String toFileUpload( ){
 return "fileUpload";
}
/**
 * 接收文件上傳請(qǐng)求
 */
@RequestMapping("/fileUpload")
public String fileUpload(List<MultipartFile> images){
 //對(duì)上傳圖像進(jìn)行解析操作
 if(images !=null && images.size()>0){
  for (MultipartFile image : images) {
   //獲取上傳文件的原始名稱
   String originalFilename = image.getOriginalFilename();
   //設(shè)置上傳文件的保存地址目錄
   String dirPath="D:\\fileUpload\\";
   File file =new File(dirPath);
   //如果保存文件的地址不存在,就先創(chuàng)建目錄
   if(!file.exists()){
    file.mkdirs();
   }
   //使用UUID重新命名上傳的文件名稱(看公司需求,也可以用日期時(shí)間)
   String newFilename= UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));
   try {
    //使用MultipartFile接口的方法完成文件上傳到指定位置
    image.transferTo(new File(dirPath+newFilename));
    //文件上傳成功后,需要將文件存放路徑存入數(shù)據(jù)庫中
    //TODO,省略
   } catch (Exception e) {
    e.printStackTrace();
    //當(dāng)文件上傳出現(xiàn)異常,則重定向到文件上傳頁面
    return "redirect:toFileUpload";
   } 
  }
 }
 //文件上傳成功后,跳轉(zhuǎn)到成功頁面
 return "success";
}

四、效果演示(讀者可以自己編寫項(xiàng)目和jsp頁面)

部署并啟動(dòng)web服務(wù)器,在瀏覽器地址啦輸入地址:http://localhost:8080/webname/toFileUpload后(讀者根據(jù)自己的項(xiàng)目和路徑進(jìn)行訪問),瀏覽器的顯示效果如下圖所示。

上面我選擇了上傳2個(gè)文件,然后點(diǎn)擊提交后,即可完成上傳。讀者操作后可自行到指定上傳位置進(jìn)行驗(yàn)證。

至此,Sring MVC環(huán)境下文件上傳功能代碼即已實(shí)現(xiàn)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Micronaut框架的簡單使用介紹

    Micronaut框架的簡單使用介紹

    這篇文章主要介紹了Micronaut框架的簡單使用介紹,幫助大家更好的理解和學(xué)習(xí)使用Micronaut,感興趣的朋友可以了解下
    2021-04-04
  • java基于移位操作實(shí)現(xiàn)二進(jìn)制處理的方法示例

    java基于移位操作實(shí)現(xiàn)二進(jìn)制處理的方法示例

    這篇文章主要介紹了java基于移位操作實(shí)現(xiàn)二進(jìn)制處理的方法,結(jié)合實(shí)例形式分析了java針對(duì)二進(jìn)制的移位操作處理技巧,需要的朋友可以參考下
    2017-02-02
  • Java中的Feign深入分析

    Java中的Feign深入分析

    這篇文章主要介紹了Java中的Feign深入分析,Feign是一個(gè)用于發(fā)送HTTP請(qǐng)求的工具,它的主要作用是在不同的服務(wù)之間傳遞Token,為了使用Feign,你需要在項(xiàng)目中配置一個(gè)Feign的配置類,需要的朋友可以參考下
    2023-09-09
  • 深入探究Java中的類加載機(jī)制

    深入探究Java中的類加載機(jī)制

    這篇文章主要給大家介紹了關(guān)于Java中類加載機(jī)制的相關(guān)資料,JVM將類加載過程分為三個(gè)步驟:裝載(Load)、鏈接(Link)和初始化(Initialize),本文通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot是如何使用SQL數(shù)據(jù)庫的?

    SpringBoot是如何使用SQL數(shù)據(jù)庫的?

    今天給大家?guī)淼氖顷P(guān)于Springboot的相關(guān)知識(shí),文章圍繞著SpringBoot是如何使用SQL數(shù)據(jù)庫的展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • JavaGUI常用窗體組件與面板使用詳解

    JavaGUI常用窗體組件與面板使用詳解

    GUI即圖形用戶界面,它是基于圖形的界面,windows就是一個(gè)圖形用戶界面的操作系統(tǒng),而DOS是基于命令提示符的操作系統(tǒng),GUI編程就是編出一個(gè)圖形用戶界面的軟件,它使用圖形的方式,以菜單、按鈕、表示、圖文框等標(biāo)準(zhǔn)界面元素組成的用戶操作界面
    2023-03-03
  • java.net.ConnectException: Connection refused問題解決辦法

    java.net.ConnectException: Connection refused問題解決辦法

    這篇文章主要介紹了java.net.ConnectException: Connection refused問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java Scanner如何獲取字符串和帶空格的字符串

    Java Scanner如何獲取字符串和帶空格的字符串

    這篇文章主要介紹了Java Scanner如何獲取字符串和帶空格的字符串問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 輕松掌握J(rèn)ava代理模式

    輕松掌握J(rèn)ava代理模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava代理模式,什么是靜態(tài)代理?感興趣的小伙伴們可以參考一下
    2016-09-09

最新評(píng)論