国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解springMVC兩種方式實現多文件上傳及效率比較

2019-11-26 13:25:35
字體:
來源:轉載
供稿:網友

springMVC實現多文件上傳的方式有兩種,一種是我們經常使用的以字節流的方式進行文件上傳,另外一種是使用springMVC包裝好的解析器進行上傳。這兩種方式對于實現多文件上傳效率上卻有著很大的差距,下面我們通過實例來看一下這兩種方式的實現方式,同時比較一下在效率上到底存在著多大的差距。

1.下載相關jar包。需要引入的jar出了springMVC的jar包外,還需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.springsource.org.apache.commons.io-1.4.0.jar。

2.配置springAnnotation-servlet.xml文件(文件名稱可以自定義,只要和web.xml中引入的名稱一樣即可):

<?xml version="1.0" encoding="UTF-8"?> <!-- Bean頭部 --> <beans xmlns="http://www.springframework.org/schema/beans"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:p="http://www.springframework.org/schema/p"   xmlns:mvc="http://www.springframework.org/schema/mvc"   xmlns:context="http://www.springframework.org/schema/context"   xmlns:util="http://www.springframework.org/schema/util"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">      <!-- 注解掃描包 -->   <context:component-scan base-package="com.tgb.web.controller.annotation"></context:component-scan>   <!-- 代替下面的兩行代碼 -->   <mvc:annotation-driven/>     <!-- 靜態資源訪問 -->   <mvc:resources location="/img/" mapping="/img/**"/>   <mvc:resources location="/js/" mapping="/js/**"/>         <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">     <property name="prefix" value="/"></property>     <property name="suffix" value=".jsp"></property>      </bean>      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">     <property name="defaultEncoding" value="utf-8"></property>      <property name="maxUploadSize" value="10485760000"></property>     <property name="maxInMemorySize" value="40960"></property>   </bean> </beans> 

3. 配置web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>springMVC1</display-name>  <welcome-file-list>   <welcome-file>index.html</welcome-file>  </welcome-file-list>    <servlet>    <servlet-name>springMVC</servlet-name>    <!-- springMVC的分發器 -->    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>     <param-name>contextConfigLocation</param-name>     <param-value>classpath*:config/springAnnotation-servlet.xml</param-value>    </init-param>    <!-- 表示當Tomcat已啟動的時候初始化這個Servlet -->    <load-on-startup>1</load-on-startup>  </servlet>    <filter>     <filter-name>encodingFilter</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>     <init-param>       <param-name>encoding</param-name>       <param-value>UTF-8</param-value> <!--設置你想用的字符集,我這里用的是GB18030-->     </init-param>     <init-param>     <param-name>forceEncoding</param-name>     <param-value>true</param-value>    </init-param>  </filter>      <filter-mapping>     <filter-name>encodingFilter</filter-name>     <url-pattern>/*</url-pattern> <!--設置你想過濾的頁面或者是Servlet,根據自己的需要配置-->   </filter-mapping>     <servlet-mapping>   <servlet-name>springMVC</servlet-name>   <url-pattern>/</url-pattern>  </servlet-mapping> </web-app> 

4. jsp頁面代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="text/javascript" src="../js/jquery-1.7.2.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript">   i = 1;   j = 1;   $(document).ready(function(){          $("#btn_add1").click(function(){       document.getElementById("newUpload1").innerHTML+='<div id="div_'+i+'"><input name="file" type="file" /><input type="button" value="刪除" onclick="del_1('+i+')"/></div>';        i = i + 1;     });          $("#btn_add2").click(function(){       document.getElementById("newUpload2").innerHTML+='<div id="div_'+j+'"><input name="file_'+j+'" type="file" /><input type="button" value="刪除" onclick="del_2('+j+')"/></div>';        j = j + 1;     });   });    function del_1(o){    document.getElementById("newUpload1").removeChild(document.getElementById("div_"+o));   }      function del_2(o){      document.getElementById("newUpload2").removeChild(document.getElementById("div_"+o));   }  </script> </head> <body>     <h1>springMVC字節流輸入上傳文件</h1>    <form name="userForm1" action="/springMVC7/file/upload" enctype="multipart/form-data" method="post">     <div id="newUpload1">       <input type="file" name="file">     </div>          <input type="button" id="btn_add1" value="增加一行" >     <input type="submit" value="上傳" >   </form>    <br>   <br>   <hr align="left" width="60%" color="#FF0000" size="3">   <br>   <br>    <h1>springMVC包裝類上傳文件</h1>    <form name="userForm2" action="/springMVC7/file/upload2" enctype="multipart/form-data" method="post"">     <div id="newUpload2">       <input type="file" name="file">     </div>     <input type="button" id="btn_add2" value="增加一行" >     <input type="submit" value="上傳" >             </form>  </body> </html> 

5.實現上傳功能的java bean:

package com.tgb.web.controller.annotation.upload;  import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date; import java.util.Iterator;  import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.filechooser.FileNameExtensionFilter;  import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ModelAndView;   import com.tgb.web.controller.entity.User;  @Controller @RequestMapping("/file") public class UploadController {          @RequestMapping("/upload"  )   public String addUser(@RequestParam("file") CommonsMultipartFile[] files,HttpServletRequest request){          for(int i = 0;i<files.length;i++){       System.out.println("fileName---------->" + files[i].getOriginalFilename());            if(!files[i].isEmpty()){         int pre = (int) System.currentTimeMillis();         try {           //拿到輸出流,同時重命名上傳的文件           FileOutputStream os = new FileOutputStream("H:/" + new Date().getTime() + files[i].getOriginalFilename());           //拿到上傳文件的輸入流           FileInputStream in = (FileInputStream) files[i].getInputStream();                      //以寫字節的方式寫文件           int b = 0;           while((b=in.read()) != -1){             os.write(b);           }           os.flush();           os.close();           in.close();           int finaltime = (int) System.currentTimeMillis();           System.out.println(finaltime - pre);                    } catch (Exception e) {           e.printStackTrace();           System.out.println("上傳出錯");         }     }     }     return "/success";   }         @RequestMapping("/upload2" )   public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {     //創建一個通用的多部分解析器     CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());     //判斷 request 是否有文件上傳,即多部分請求     if(multipartResolver.isMultipart(request)){       //轉換成多部分request        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;       //取得request中的所有文件名       Iterator<String> iter = multiRequest.getFileNames();       while(iter.hasNext()){         //記錄上傳過程起始時的時間,用來計算上傳時間         int pre = (int) System.currentTimeMillis();         //取得上傳文件         MultipartFile file = multiRequest.getFile(iter.next());         if(file != null){           //取得當前上傳文件的文件名稱           String myFileName = file.getOriginalFilename();           //如果名稱不為“”,說明該文件存在,否則說明該文件不存在           if(myFileName.trim() !=""){             System.out.println(myFileName);             //重命名上傳后的文件名             String fileName = "demoUpload" + file.getOriginalFilename();             //定義上傳路徑             String path = "H:/" + fileName;             File localFile = new File(path);             file.transferTo(localFile);           }         }         //記錄上傳該文件后的時間         int finaltime = (int) System.currentTimeMillis();         System.out.println(finaltime - pre);       }            }     return "/success";   }      @RequestMapping("/toUpload" )    public String toUpload() {          return "/upload";   }    } 

6.最后看后臺打印數據,數據來源于后臺打印的上傳文件所用的時間,第一幅圖片是使用字節流寫入方式完成三個文件上傳中每個文件用時,第二幅圖片是使用springMVC包裝好的解析器進行的三個相同的文件上傳中每個文件的用時:

字節流實現文件上傳的傳遞效率,結果顯示傳遞三個文件用時分別為534ms,453ms和387ms。

使用springMVC解析器進行文件上傳用時分別為2ms,1ms和2ms。

通過對比這兩種方式我們可以發現使用springMVC進行多文件的效率顯然要比字符流寫入方式效率上要高得多。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石屏县| 普定县| 新丰县| 兴安县| 九龙县| 丰顺县| 峡江县| 齐河县| 青海省| 浮山县| 南宁市| 南华县| 县级市| 高邮市| 虹口区| 正镶白旗| 扎赉特旗| 定安县| 白城市| 黔东| 临夏县| 星子县| 镇巴县| 合阳县| 河南省| 临泽县| 宣城市| 博爱县| 铜梁县| 丹凤县| 南丹县| 德州市| 霍林郭勒市| 临桂县| 登封市| 青河县| 铁岭县| 孙吴县| 昌邑市| 新津县| 科尔|