สามวิธีในการอัปโหลดไฟล์ใน SpringMVC เพียงอัปโหลดรหัสคุณสามารถบอกได้อย่างรวดเร็ว
แผนกต้อนรับ:
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 " action = "/springmvc006/fileupload" method = "post" enctype = "multipart/form-data"> <h1> อัปโหลดไฟล์โดยใช้สตรีมมิ่ง </h1> <อินพุต type = "file" name = "file"> <อินพุต type = "submit" enctype = "multipart/form-data"> <h1> อัปโหลดไฟล์โดยใช้วิธีไฟล์ transfer ที่จัดทำโดย multipart </h1> <อินพุต type = "file" name = "file"> <input type = "submit" value = "upload"/> </form> enctype = "multipart/form-data"> <h1> อัปโหลดไฟล์โดยใช้วิธีการที่จัดทำโดย Spring MVC </h1> <input type = "file" name = "file"> <input type = "subment" value = "upload"/> </form> </body> </html>
การกำหนดค่า:
<!-การอัปโหลดไฟล์หลายส่วน-> <bean id = "MultipArtResolver"> <property name = "MaxUploadSize" value = "104857600" /> <property name = "MaxinMemorySize" value = "4096" />
หลังเวที:
วิธีที่ 1:
/** อัปโหลดไฟล์ผ่านสตรีม* @requestparam ("ไฟล์") ห่อหุ้มไฟล์ที่ได้จากชื่อ = ไฟล์ควบคุมไฟล์ลงในวัตถุ CommonsMultipartFile*/@requestmapping ("fileupload") สตริงสาธารณะ fileupload (@requestparam ("ไฟล์") startTime = system.currentTimeMillis (); System.out.println ("ชื่อไฟล์:"+file.getoriginalfilename ()); ลอง {// รับเอาต์พุตสตรีมเอาท์พุท OS = ใหม่ fileOutputStream ("e:/"+วันที่ใหม่ (). getTime ()+file.getoriginalfilename ()); // รับอินพุตสตรีม pommonsmultipartFile เพื่อรับสตรีมสตรีมของไฟล์โดยตรง IS = file.getInputStream (); อุณหภูมิ int; // อ่านและเขียนไบต์ทีละหนึ่งไปยังขณะที่ ((temp = is.read ())! = (-1)) {os.write (temp); } os.flush (); os.close (); is.close (); } catch (filenotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } endtime long = system.currentTimeMillis (); System.out.println ("รันเวลาของวิธีการหนึ่ง:"+string.valueof (endtime-starttime)+"MS"); กลับ "/ความสำเร็จ"; -วิธีที่ 2:
/** ใช้ file.transto เพื่อบันทึกไฟล์ที่อัปโหลด*/ @requestmapping ("fileupload2") สตริงสาธารณะ fileupload2 (@requestparam ("ไฟล์") ไฟล์ CommonsMultipartFile) โยน iOexception System.out.println ("ชื่อไฟล์:"+file.getoriginalfilename ()); String path = "E:/"+วันที่ใหม่ (). getTime ()+file.getoriginalfilename (); ไฟล์ newfile = ไฟล์ใหม่ (พา ธ ); // เขียนไฟล์โดยตรงผ่านเมธอด CommonsMultipartFile (หมายเหตุในเวลานี้) ไฟล์ transferto (newfile); endtime long = system.currentTimeMillis (); System.out.println ("เวลาทำงานของวิธีที่สอง:"+string.valueof (endtime-starttime)+"MS"); กลับ "/ความสำเร็จ"; -วิธีที่ 3:
/**ใช้วิธีการอัปโหลดไฟล์ที่ให้ไว้โดย Spring*/ @requestMapping ("SpringUpload") Public String SpringUpload (คำขอ httpservletRequest) พ่นผิดกฎหมาย legengalStateException, iOexception // เริ่มต้นบริบทปัจจุบันเป็น CommonsMutipartResolver (Multipart Parser) CommonsMultipartResolver MultipartResolver = ใหม่ CommonsMultipartResolver (request.getSession (). GetServletContext ()); // ตรวจสอบว่ามี enctype = "multipart/form-data" ในรูปแบบถ้า (multipartresolver.ismultipart (คำขอ)) {// เปลี่ยนคำขอเป็นคำขอ multiparthttpservletRequest Multirequest = (MultiparthttpServletRequest) // รับชื่อไฟล์ทั้งหมดใน MultireQuest Iterator iter = multirequest.getFilenames (); ในขณะที่ (iter.hasnext ()) {// transfuse ไฟล์ทั้งหมดในครั้งเดียว multipartfile ไฟล์ = multirequest.getFile (iter.next (). toString ()); if (file! = null) {String path = "e:/springupload"+file.getoriginalfilename (); // อัปโหลด file.transferto (ไฟล์ใหม่ (พา ธ )); }}} endtime long = system.currentTimeMillis (); System.out.println ("เวลาทำงานของวิธีที่สาม:"+string.valueof (endtime-starttime)+"MS"); กลับ "/ความสำเร็จ"; -มาดูเวลาอัปโหลดการทดสอบกันเถอะ:
ครั้งแรกที่ฉันใช้ไฟล์ 4M:
ชื่อไฟล์: test.rar
วิธี 1 เวลาทำงาน: 14712ms
ชื่อไฟล์: test.rar
วิธี 2 รันเวลา: 5ms
วิธี 3 เวลาทำงาน: 4ms
ครั้งที่สอง: ฉันใช้ไฟล์ 50m
ความคืบหน้าของวิธีการช้ามากและจะใช้เวลา 5 นาที
วิธีการ 2 รันเวลา: 67ms
วิธี 3 เวลาทำงาน: 80ms
จากผลการทดสอบเราจะเห็นว่าวิธีการอัปโหลดไฟล์โดยใช้ SpringMVC นั้นเร็วกว่ามาก!
สำหรับผลลัพธ์ของการทดสอบ 2: อาจเป็นไปได้ว่าวิธีการที่สามจะต้องค้นหาทีละตัวดังนั้นควรช้าลง แต่โดยทั่วไปแล้วเรามีวิธีที่ 3 เพราะมันสามารถให้วิธีการเพิ่มเติมแก่เรา
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น