最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC 單文件上傳與多文件上傳實例

 更新時間:2017年06月22日 16:01:46   作者:CSDN_LQR  
這篇文章主要介紹了SpringMVC 單文件上傳與多文件上傳實例的相關(guān)資料,需要的朋友可以參考下

一、簡述

一個javaWeb項目中,文件上傳功能幾乎是必不可少的,本人在項目開發(fā)中也時常會遇到,以前也沒怎么去理它,今天有空學(xué)習(xí)了一下這方面的知識,于是便將本人學(xué)到的SpringMVC中單文件與多文件上傳這部分知識做下筆記。

二、單文件上傳

1、頁面

這里以一個簡單的表單提交為例子,文件上傳需要將表單的提交方法設(shè)置為post,將enctype的值設(shè)置為"multipart/form-data"。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  <input type="file" name="img"><br /> 
  <input type="submit" name="提交">
</form>

2、控制器

在Controller的處理方法中,使用MultipartFile對象作為參數(shù)接收前端上傳過來的文件,具體說明請看代碼注釋。

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  // 這里的MultipartFile對象變量名跟表單中的file類型的input標(biāo)簽的name相同,所以框架會自動用MultipartFile對象來接收上傳過來的文件,當(dāng)然也可以使用@RequestParam("img")指定其對應(yīng)的參數(shù)名稱
  public String upload(MultipartFile img, HttpSession session)
      throws Exception {
    // 如果沒有文件上傳,MultipartFile也不會為null,可以通過調(diào)用getSize()方法獲取文件的大小來判斷是否有上傳文件
    if (img.getSize() > 0) {
      // 得到項目在服務(wù)器的真實根路徑,如:/home/tomcat/webapp/項目名/images
      String path = session.getServletContext().getRealPath("images");
      // 得到文件的原始名稱,如:美女.png
      String fileName = img.getOriginalFilename();
      // 通過文件的原始名稱,可以對上傳文件類型做限制,如:只能上傳jpg和png的圖片文件
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
        return "/success.jsp";
      }
    }
    return "/error.jsp";
  }
}

3、springmvc.xml配置

使用MultipartFile對象接收前端上傳過來的文件,還需要在springmvc的配置文件中進(jìn)行如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

  ...

  <!-- 注意:CommonsMultipartResolver的id是固定不變的,一定是multipartResolver,不可修改 -->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 如果上傳后出現(xiàn)文件名中文亂碼可以使用該屬性解決 -->
    <property name="defaultEncoding" value="utf-8"/>
    <!-- 單位是字節(jié),不設(shè)置默認(rèn)不限制總的上傳文件大小,這里設(shè)置總的上傳文件大小不超過1M(1*1024*1024) -->
    <property name="maxUploadSize" value="1048576"/>
    <!-- 跟maxUploadSize差不多,不過maxUploadSizePerFile是限制每個上傳文件的大小,而maxUploadSize是限制總的上傳文件大小 -->
    <property name="maxUploadSizePerFile" value="1048576"/>
  </bean>

  <!-- 設(shè)置一個簡單的異常解析器,當(dāng)文件上傳超過大小限制時跳轉(zhuǎn) -->
  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="defaultErrorView" value="/error.jsp"/>
  </bean>
</beans>

上面配置文件中的CommonsMultipartResolver下的屬性值配置不是必須的,你也可以全部不寫。到這里就可以實現(xiàn)單個文件上傳了,下面來看看多文件上傳。

三、多文件上傳

其實多文件上傳也很簡單,單文件上傳是在Controller的處理方法中使用MultipartFile對象作為參數(shù)接收前端上傳過來的文件,而多文件上傳則使用MultipartFile對象數(shù)組來接收。

1、頁面

該頁面中有幾個name值一樣的file類型的input標(biāo)簽,其他跟單文件上傳的頁面沒差。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
  file 1 : <input type="file" name="imgs"><br /> 
  file 2 : <input type="file" name="imgs"><br /> 
  file 3 : <input type="file" name="imgs"><br /> 
  <input type="submit" name="提交">
</form>

2、控制器

控制器中的處理方法使用MultipartFile[]數(shù)組作為接收參數(shù),并不能直接使用,需要校正參數(shù),具體說明請看代碼注釋。

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  // 這里的MultipartFile[] imgs表示前端頁面上傳過來的多個文件,imgs對應(yīng)頁面中多個file類型的input標(biāo)簽的name,但框架只會將一個文件封裝進(jìn)一個MultipartFile對象,
  // 并不會將多個文件封裝進(jìn)一個MultipartFile[]數(shù)組,直接使用會報[Lorg.springframework.web.multipart.MultipartFile;.<init>()錯誤,
  // 所以需要用@RequestParam校正參數(shù)(參數(shù)名與MultipartFile對象名一致),當(dāng)然也可以這么寫:@RequestParam("imgs") MultipartFile[] files。
  public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)
      throws Exception {
    for (MultipartFile img : imgs) {
      if (img.getSize() > 0) {
        String path = session.getServletContext().getRealPath("images");
        String fileName = img.getOriginalFilename();
        if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
          File file = new File(path, fileName);
          img.transferTo(file);
        }
      }
    }
    return "/success.jsp";
  }
}

同樣的,使用MultipartFile數(shù)組接收前端上傳過來的多個文件,也需要在springmvc的配置文件進(jìn)行配置,具體配置與上述單文件上傳的springmvc.xml配置沒差,直接拷貝過來就行。這樣,就可以進(jìn)行多文件上傳了。

四、多種文件上傳情景綜合

當(dāng)然,項目開發(fā)中,場景可能并不是這么簡單,上述的多文件上傳是一個個文件選擇后一起上傳(即多個name相同的input標(biāo)簽),那要是我項目中只要一個input標(biāo)簽就可以一次性多個文件呢?又或者一個頁面中既要一個個選擇的多文件上傳,又要一次性選擇的多文件上傳,還要有單文件上傳呢?沒問題,MultipartFile[]通吃,代碼也很easy,下面直接上代碼。

1、頁面

這里的 “一次選擇多個文件的多文件上傳” 只是在input標(biāo)簽中加上了multiple屬性而已。

<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">

  一次選擇多個文件的多文件上傳 : <br /> 
  <input type="file" name="imgs1" multiple><br /> <br /> 

  一次選擇一個文件的多文件上傳 : <br /> 
  <input type="file" name="imgs2"><br /> 
  <input type="file" name="imgs2"><br /><br /> 

  單文件上傳 : <br /> 
  <input type="file" name="imgs3"><br /><br /> 
  <input type="submit" name="提交">
</form>

2、控制器

@Controller
@RequestMapping("/test")
public class MyController {

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  public String upload(@RequestParam MultipartFile[] imgs1,@RequestParam MultipartFile[] imgs2,@RequestParam MultipartFile[] imgs3, HttpSession session)
      throws Exception {
    String path = session.getServletContext().getRealPath("images");
    for (MultipartFile img : imgs1) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs2) {
      uploadFile(path, img);
    }
    for (MultipartFile img : imgs3) {
      uploadFile(path, img);
    }
    return "/success.jsp";
  }

  private void uploadFile(String path, MultipartFile img) throws IOException {
    if (img.getSize() > 0) {
      String fileName = img.getOriginalFilename();
      if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
        File file = new File(path, fileName);
        img.transferTo(file);
      }
    }
  }
}

MultipartFile[]就是如此強(qiáng)大,不管單個多個,邏輯處理一樣,所以建議在項目開發(fā)中使用MultipartFile[]作為文件的接收參數(shù)。

五、拓展

1、MultipartFile類常用的一些方法:

String getContentType()//獲取文件MIME類型
InputStream getInputStream()//獲取文件流
String getName() //獲取表單中文件組件的名字
String getOriginalFilename() //獲取上傳文件的原名
long getSize() //獲取文件的字節(jié)大小,單位byte
boolean isEmpty() //是否為空
void transferTo(File dest)

2、CommonsMultipartResolver的屬性解析

  1. defaultEncoding:表示用來解析request請求的默認(rèn)編碼格式,當(dāng)沒有指定的時候根據(jù)Servlet規(guī)范會使用默認(rèn)值ISO-8859-1。當(dāng)request自己指明了它的編碼格式的時候就會忽略這里指定的defaultEncoding。
  2. uploadTempDir:設(shè)置上傳文件時的臨時目錄,默認(rèn)是Servlet容器的臨時目錄。
  3. maxUploadSize:設(shè)置允許上傳的總的最大文件大小,以字節(jié)為單位計算。當(dāng)設(shè)為-1時表示無限制,默認(rèn)是-1。
  4. maxUploadSizePerFile:跟maxUploadSize差不多,不過maxUploadSizePerFile是限制每個上傳文件的大小,而maxUploadSize是限制總的上傳文件大小。
  5. maxInMemorySize:設(shè)置在文件上傳時允許寫到內(nèi)存中的最大值,以字節(jié)為單位計算,默認(rèn)是10240。
  6. resolveLazily:為true時,啟用推遲文件解析,以便在UploadAction中捕獲文件大小異常。

六、注意

  1. 在開發(fā)過程中,建議把配置文件中的異常解析器(SimpleMappingExceptionResolver)先注釋掉,方便我們查看錯誤。
  2. 有時候上傳出錯,是因為我們在配置文件中限制了上傳文件的大小,你可以不加這個限制,但個人建議這個限制最好還是加上,具體文件大小限制請根據(jù)公司項目情況而定。
  3. SpringMVC中使用MultipartFile接收上傳文件需要依賴兩個jar包,分別是:commons-fileupload-1.3.3.jar、commons-io-2.5.jar。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot整合shiro之thymeleaf使用shiro標(biāo)簽的方法

    springboot整合shiro之thymeleaf使用shiro標(biāo)簽的方法

    Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP ,這篇文章主要介紹了springboot整合shiro之thymeleaf使用shiro標(biāo)簽的相關(guān)知識,需要的朋友可以參考下
    2021-10-10
  • SpringBoot操作MaxComputer方式(保姆級教程)

    SpringBoot操作MaxComputer方式(保姆級教程)

    這篇文章主要介紹了SpringBoot操作MaxComputer方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java設(shè)計模式之單例模式實例分析

    Java設(shè)計模式之單例模式實例分析

    這篇文章主要介紹了Java設(shè)計模式之單例模式,以實例形式較為詳細(xì)的分析了單例模式的概念、定義及簡單實現(xiàn)技巧,需要的朋友可以參考下
    2015-11-11
  • IDEA常用配置之類Tab頁多行顯示方式

    IDEA常用配置之類Tab頁多行顯示方式

    這篇文章主要介紹了IDEA常用配置之類Tab頁多行顯示方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 基于Java protected的深入理解

    基于Java protected的深入理解

    本篇文章是對Java protected進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Java后端接入微信小程序?qū)崿F(xiàn)登錄功能

    Java后端接入微信小程序?qū)崿F(xiàn)登錄功能

    這篇文章主要介紹了Java如何在后端接入微信小程序從而實現(xiàn)登錄功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • 關(guān)于國際化、OGNL表達(dá)式語言

    關(guān)于國際化、OGNL表達(dá)式語言

    本篇文章,小編為大家介紹關(guān)于國際化、OGNL表達(dá)式語言,有需要的朋友可以參考一下
    2013-04-04
  • springdata jpa單表操作crud的實例代碼詳解

    springdata jpa單表操作crud的實例代碼詳解

    這篇文章主要介紹了springdata jpa單表操作crud的實例代碼詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Spring Boot中使用Server-Sent Events (SSE) 實現(xiàn)實時數(shù)據(jù)推送教程

    Spring Boot中使用Server-Sent Events (SSE) 實

    Server-Sent Events (SSE) 是HTML5引入的一種輕量級的服務(wù)器向瀏覽器客戶端單向推送實時數(shù)據(jù)的技術(shù),本文主要介紹了Spring Boot中使用Server-Sent Events (SSE) 實現(xiàn)實時數(shù)據(jù)推送教程,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案

    Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案

    實體類中有一個 List<String> 類型的屬性,對應(yīng)于 MySQL 表里的 varchar 字段,使用 MyBatis 添加或查詢時能互相轉(zhuǎn)換,本文給大家介紹Java中的List和MySQL中的varchar相互轉(zhuǎn)換的解決方案,需要的朋友可以參考下
    2024-06-06

最新評論

饶平县| 阳谷县| 鞍山市| 中方县| 如东县| 平远县| 金湖县| 汝阳县| 湟源县| 清水河县| 柳河县| 宝山区| 吴川市| 谢通门县| 洱源县| 福泉市| 新乡市| 宿迁市| 盖州市| 禄劝| 怀柔区| 那坡县| 萨迦县| 南阳市| 扬州市| 图们市| 南和县| 陇川县| 义乌市| 正蓝旗| 紫金县| 马鞍山市| 陆良县| 永吉县| 青岛市| 富顺县| 秦安县| 肇庆市| 台江县| 易门县| 新疆|