1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      SpringMVC單文件上傳與多文件上傳實例

      一、簡述

      10年積累的做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有陽西免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

      二、單文件上傳

      1、頁面

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


      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"?>
      
      
        ...
      
        
        
          
          
          
          
          
          
        
      
        
        
          
        
      
      
      

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

      三、多文件上傳

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

      1、頁面

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

      file 1 :
      file 2 :
      file 3 :

      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;.()錯誤,
        // 所以需要用@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屬性而已。

      一次選擇多個文件的多文件上傳 :


      一次選擇一個文件的多文件上傳 :



      單文件上傳 :


      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[]就是如此強大,不管單個多個,邏輯處理一樣,所以建議在項目開發(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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


      本文標(biāo)題:SpringMVC單文件上傳與多文件上傳實例
      網(wǎng)頁網(wǎng)址:http://www.ef60e0e.cn/article/gsideo.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        蚌埠市| 开封市| 彰武县| 黄陵县| 宝应县| 谢通门县| 连城县| 天气| 库车县| 慈溪市| 贵溪市| 雷山县| 响水县| 乌拉特后旗| 武安市| 红原县| 铜川市| 西华县| 泰安市| 醴陵市| 永兴县| 望奎县| 理塘县| 岗巴县| 揭阳市| 雷波县| 都安| 南陵县| 扎囊县| 陇川县| 仲巴县| 电白县| 辉南县| 桂阳县| 清新县| 绥滨县| 土默特右旗| 年辖:市辖区| 黔西县| 台安县| 井研县|