真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java如何實(shí)現(xiàn)單文件與多文件上傳功能-創(chuàng)新互聯(lián)

小編給大家分享一下java如何實(shí)現(xiàn)單文件與多文件上傳功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

站在用戶的角度思考問題,與客戶深入溝通,找到惠農(nóng)網(wǎng)站設(shè)計(jì)與惠農(nóng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋惠農(nóng)地區(qū)。

java 文件上傳(單文件與多文件)

一、簡述

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

二、單文件上傳

1、頁面

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


   
  

2、控制器

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

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

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  // 這里的MultipartFile對(duì)象變量名跟表單中的file類型的input標(biāo)簽的name相同,所以框架會(huì)自動(dòng)用MultipartFile對(duì)象來接收上傳過來的文件,當(dāng)然也可以使用@RequestParam("img")指定其對(duì)應(yīng)的參數(shù)名稱
  public String upload(MultipartFile img, HttpSession session)
      throws Exception {
    // 如果沒有文件上傳,MultipartFile也不會(huì)為null,可以通過調(diào)用getSize()方法獲取文件的大小來判斷是否有上傳文件
    if (img.getSize() > 0) {
      // 得到項(xiàng)目在服務(wù)器的真實(shí)根路徑,如:/home/tomcat/webapp/項(xiàng)目名/images
      String path = session.getServletContext().getRealPath("images");
      // 得到文件的原始名稱,如:美女.png
      String fileName = img.getOriginalFilename();
      // 通過文件的原始名稱,可以對(duì)上傳文件類型做限制,如:只能上傳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對(duì)象接收前端上傳過來的文件,還需要在springmvc的配置文件中進(jìn)行如下配置:




  ...

  
  
    
    
    
    
    
    
  

  
  
    
  

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

三、多文件上傳

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

1、頁面

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


  file 1 :  
  file 2 :  
  file 3 :  
  

2、控制器

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

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

  @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
  // 這里的MultipartFile[] imgs表示前端頁面上傳過來的多個(gè)文件,imgs對(duì)應(yīng)頁面中多個(gè)file類型的input標(biāo)簽的name,但框架只會(huì)將一個(gè)文件封裝進(jìn)一個(gè)MultipartFile對(duì)象,
  // 并不會(huì)將多個(gè)文件封裝進(jìn)一個(gè)MultipartFile[]數(shù)組,直接使用會(huì)報(bào)[Lorg.springframework.web.multipart.MultipartFile;.()錯(cuò)誤,
  // 所以需要用@RequestParam校正參數(shù)(參數(shù)名與MultipartFile對(duì)象名一致),當(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ù)組接收前端上傳過來的多個(gè)文件,也需要在springmvc的配置文件進(jìn)行配置,具體配置與上述單文件上傳的springmvc.xml配置沒差,直接拷貝過來就行。這樣,就可以進(jìn)行多文件上傳了。

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

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

1、頁面

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



  一次選擇多個(gè)文件的多文件上傳 :  
    

  一次選擇一個(gè)文件的多文件上傳 :  
   
   

  單文件上傳 :  
   
  

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)大,不管單個(gè)多個(gè),邏輯處理一樣,所以建議在項(xià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的屬性解析

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

六、注意

  1. 在開發(fā)過程中,建議把配置文件中的異常解析器(SimpleMappingExceptionResolver)先注釋掉,方便我們查看錯(cuò)誤。

  2. 有時(shí)候上傳出錯(cuò),是因?yàn)槲覀冊谂渲梦募邢拗屏松蟼魑募拇笮?,你可以不加這個(gè)限制,但個(gè)人建議這個(gè)限制最好還是加上,具體文件大小限制請(qǐng)根據(jù)公司項(xiàng)目情況而定。

  3. SpringMVC中使用MultipartFile接收上傳文件需要依賴兩個(gè)jar包,分別是:commons-fileupload-1.3.3.jar、commons-io-2.5.jar。

以上是“java如何實(shí)現(xiàn)單文件與多文件上傳功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文題目:java如何實(shí)現(xiàn)單文件與多文件上傳功能-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/ggpcc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部