Ada dua cara untuk menerapkan pengunggahan multi-file di SpringMVC. Salah satunya adalah mengunggah file dalam aliran byte yang sering kita gunakan, dan yang lainnya adalah mengunggahnya menggunakan parser yang dibungkus dalam springmvc. Kedua metode ini memiliki kesenjangan besar dalam efisiensi mencapai unggahan multi-file. Mari kita lihat metode implementasi dari kedua metode ini melalui contoh, dan bandingkan seberapa besar kesenjangan dalam efisiensi.
1. Unduh paket JAR yang relevan. Selain paket JAR SpringMVC, com.springsource.org.apache.commons.fileupload-1.2.0.jar dan com.springsource.org.apache.commons.io-1.4.0.jar dan com.springsource.org.apache.commons.io-1.4.0.
2. Konfigurasikan file springannotation-servlet.xml (nama file dapat disesuaikan, asalkan sama dengan nama yang diperkenalkan di web.xml):
<? Xml Version = "1.0" encoding = "utf-8"?> <!-header bean-> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org. xmlns: p = "http://www.springframework.org/schema/p" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http:/schema.mvc" xmlns: context = "http:/schema.mvc" xmlns: context = "http:org.org.org.ram xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <!-Paket pemindaian anotasi-> Konteks: Komponen-Scan Base-package = "com.tgb.web.controller.annotation"> </konteks: komponen-scan> <!-ganti dua baris kode berikut-> <mvc: anotasi-driven/> <!-akses sumber daya statis-> <mvc: sumber daya = "/img/" pemetaan = "/img/**" pemetaan = "/js/**"/> <bean id = "viewResolver"> <name properti = "prefix" value = "/"> </propert> <properti nama = "sufiks" value = ". name = "MAXUPLOADSIZE" Value = "10485760000"> </property> <properti name = "maxInmemorySize" value = "40960"> </proper
3. Konfigurasikan file 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/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = xmlns: web = "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" versi = "2.5"> <play-name> <play-name> </weverday n-name> </Webapp_id "Versi =" 2.5 "> <play-name> MPRINGME/MPRINGE1> </WebApp_id" Version = "2.5"> <play-name> <creendaking-file> index.html </celcome-file> </celcome-file-list> <servlet> <servlet-name> springmvc </servlet-name> <!-distributor springmvc-> <servlet-class> org.springframework.web.servlet.dispatcatchlet </servlet-classicer> param-classicer.web. <param-value> classpath*: config/springannotation-servlet.xml </param-value> </it-param> <!-menunjukkan bahwa servlet diinisialisasi saat tomcat dimulai-> <bouat-on-startup> 1 </load-on-startup> </servlet> <filter> <filtername> encodingfilter </boad-on-startup> </servlet> <filter> <filtername> encodingfilter <nift-class> org.springframework.web.filter.characterencodingfilter </filter-class> <Ilin-param> <param-name> encoding </param-name> <param-value> UTF-8 </param-value> <!-Setel karakter yang ingin Anda gunakan. I am using 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> <!--Set the page or servlet you want to filter, Konfigurasikan sesuai dengan kebutuhan Anda-> </filter-mapping> <servlet-mapping> <servlet-name> springmvc </servlet-name> <rerl-pattern>/</rerl-pattern> </servlet-mapping> </seb-app>
4. Kode Halaman JSP:
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en" "http://www.w3.org/org/ht4/t." <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> Sisipkan judul di sini </title "; j = 1; $ (dokumen) .ready (function () {$ ("#btn_add1"). klik (function () {document.getElementById ("newUdload1"). innerHtml+= '<div id = "div _'+i+'"> <input name = "file" type = "file" /<div _'+i+'" OnClick = "del_1 ('+i+')"/> </div> '; /> type input = "value" = "delete" onClick = "del_2 ('+j+')"/> </div> '; fungsi 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 byte stream input upload file</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 = "Tambahkan satu baris"> <input type = "kirim" value = "unggah"> </form> <br> <hr align = "kiri" color = "#ff0000" size = "3"> <br> <h1> springmvc class wrapper file unggah </h1> <bentuk name = "User2" enctype = "multipart/form-data" metode = "post" "> <div id =" newupload2 "> <input type =" file "name =" file "> </div> <input type =" Tombol "id =" btn_add2 "value =" tambahkan satu baris "> <input type =" kirim "value =" unggah "> </form BOY/HOT/HOT/HOT/HOT/HOT/HOT/BOT/BOT/BOT/BOT/HOLT/BOT/BOT/BOTY </HOWLET =5. Java Bean yang mengimplementasikan fungsi unggahan:
paket com.tgb.web.controller.annotation.upload; impor java.io.file; impor java.io.fileInputStream; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.printwriter; impor java.io.unsupportedencodingException; impor java.net.urldecoder; impor java.util.date; impor java.util.iterator; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor javax.swing.filechooser.filenameextensionfilter; impor org.springframework.stereotype.controller; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.requestmethod; impor org.springframework.web.bind.annotation.requestparam; impor org.springframework.web.multipart.multipartfile; impor org.springframework.web.multipart.multipartttpservletRequest; impor org.springframework.web.multipart.commons.CommonsmultipartFile; impor org.springframework.web.multipart.commons.Commonsmultipartresolver; impor org.springframework.web.servlet.modelandview; impor com.tgb.web.controller.entity.user; @Controller @RequestMapping ("/file") kelas publik UploadController {@RequestMapping ("/unggah") Public String addUser (@RequestParam ("File") CommonsMultipartFile [], httpservletRequest) {for (int i = 0; i <file. System.out.println ("FileName ----------->" + file [i] .getoriginalFileName ()); if (! file [i] .isempty ()) {int pre = (int) system.currentTimeMillis (); Coba {// Dapatkan aliran output dan ganti nama file yang diunggah fileOutputStream os = new fileoutputStream ("h:/" + date baru (). gettime () + file [i] .getoriginalFileName ()); // Dapatkan aliran input file yang diunggah fileInputStream di = (fileInputStream) file [i] .getInputStream (); // tulis file int b = 0; while ((b = in.read ())! = -1) {os.write (b); } os.flush (); os.close (); melampirkan(); int final time = (int) system.currentTimemillis (); System.out.println (FinalTime - Pre); } catch (Exception e) {E.PrintStackTrace (); System.out.println ("UploadError"); }}} return "/success"; } @RequestMapping ("/unggah2") Upload string publik2 (permintaan httpservletRequest, httpservletResponse response) melempar IllegalStateException, ioException {// Buat General Resolver CommonsMultiPartresolver Multipartresolver = General Resolver CommonsMultiParTolver = New Multipartresolver = CommonsMultiPartresolver (request.getSession (). GetServletContext ()); // Pertahankan apakah permintaan memiliki unggahan file, yaitu, jika (multipartresolver.ismultipart (request)) {// konversi ke permintaan multipart MultiparthttpservletRequest multirequest = (multipartttpservletRequest) permintaan; // Dapatkan semua nama file dalam permintaan iterator <string> iter = multirequest.getFileNames (); while (iter.hasnext ()) {// Catat waktu pada awal proses unggah dan gunakan untuk menghitung waktu unggahan int pre = (int) system.currentTimeMillis (); // Dapatkan file unggah multipartFile file = multirequest.getFile (iter.next ()); if (file! = null) {// Dapatkan nama file dari file yang saat ini diunggah string myFileName = file.getoriginalFileName (); // Jika namanya tidak "", itu berarti file ada, jika tidak, itu berarti file tidak ada jika (myfileName.trim ())! = "") {System.out.println (myfileName); // Ubah nama nama file yang diunggah string filename = "demoupload" + file.getoriginalfileName (); // Tentukan path string unggah jalur = "h:/" + nama file; File localfile = file baru (path); file.transferto (localfile); }} // Catat waktu setelah mengunggah file int finaltime = (int) system.currentTimeMillis (); System.out.println (FinalTime - Pre); }} return "/success"; } @RequestMapping ("/toupload") public string toupload () {return "/unggah"; }} 6. Akhirnya, lihat data pencetakan latar belakang. Data berasal dari waktu yang diperlukan untuk mengunggah file yang dicetak di latar belakang. Gambar pertama adalah waktu yang dibutuhkan untuk mengunggah setiap file dalam tiga file menggunakan penulisan aliran byte. Gambar kedua adalah waktu yang dibutuhkan untuk mengunggah setiap file dalam tiga file identik menggunakan parser yang dibungkus dalam springmvc:
Byte Stream mewujudkan efisiensi pengiriman unggahan file, dan hasilnya menunjukkan bahwa waktu yang diperlukan untuk melewati tiga file adalah 534ms, 453ms dan 387ms masing -masing.
Waktu untuk mengunggah file menggunakan Parser SpringMVC masing -masing adalah 2ms, 1ms dan 2ms.
Dengan membandingkan kedua metode ini, kita dapat menemukan bahwa menggunakan SpringMVC untuk beberapa file jelas jauh lebih efisien daripada menulis karakter.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.