1. หลักการอัพโหลดไฟล์
1. ข้อกำหนดเบื้องต้นสำหรับการอัปโหลดไฟล์:
. วิธีการของแบบฟอร์มจะต้องโพสต์
ข. Enctype ของแบบฟอร์มจะต้องเป็นแบบหลายส่วน/ฟอร์ม-ข้อมูล (กำหนดวิธีการร้องขอโพสต์และประเภทข้อมูลของร่างกายคำขอ)
ค. ประเภทของอินพุตที่ให้ไว้ในฟอร์มคือโดเมนอัพโหลดไฟล์ประเภทไฟล์
2. ใช้ส่วนประกอบของบุคคลที่สามเพื่อให้ได้การอัปโหลดไฟล์
1. คอมโพเนนต์คอมมอนส์-ฟิลด์โหลด:
JAR: Commons-fileupload.jar
Commons-io.jar
2. คลาสหลักหรืออินเทอร์เฟซ
diskfileitemfactory: ตั้งค่าสภาพแวดล้อม
โมฆะสาธารณะ setsizethreshold (int sizethreshold): ตั้งขนาดบัฟเฟอร์ ค่าเริ่มต้นคือ 10kb
เมื่อไฟล์ที่อัปโหลดเกินขนาดบัฟเฟอร์ส่วนประกอบ fileupload จะอัปโหลดไฟล์โดยใช้แคชไฟล์ชั่วคราว
โมฆะสาธารณะ setRepository (ที่เก็บ java.io.file): ตั้งค่าไดเรกทอรีที่เก็บไฟล์ชั่วคราว โดยค่าเริ่มต้นไดเรกทอรีการจัดเก็บไฟล์ชั่วคราวของระบบ
ServletFileUpload: คลาสการอัปโหลดหลัก (ฟังก์ชั่นหลัก: แยกวิเคราะห์เนื้อหาร่างกายของคำขอ)
บูลีน ismultipartcontent (httpservletrequest? คำขอ): กำหนดว่า enctype ของแบบฟอร์มของผู้ใช้นั้นเป็นแบบหลายส่วน/แบบฟอร์ม-ข้อมูลหรือไม่
รายการ parserequest (คำขอ httpservletrequest): แยกวิเคราะห์เนื้อหาในร่างกายคำขอ
setFilesizeMax (4*1024*1024); // ตั้งค่าขนาดของไฟล์ที่อัปโหลดเพียงครั้งเดียว
upload.setSizemax (6*1024*1024); // ตั้งค่าขนาดไฟล์ทั้งหมด
FileItem: หมายถึงฟิลด์อินพุตในแบบฟอร์ม
บูลีน iSformfield (): มันเป็นสนามปกติหรือไม่
String getFieldName: รับชื่อฟิลด์ของฟิลด์ปกติ
String getString (): รับค่าของฟิลด์ปกติ
InputStream getInputStream (): รับกระแสอินพุตของฟิลด์ที่อัปโหลด
String getName (): รับชื่อไฟล์ที่อัปโหลด
ตัวอย่าง: ก่อนสร้างโฟลเดอร์ไฟล์ในไดเรกทอรี Web-Inf นั่นคือไฟล์ทั้งหมดจะต้องอัปโหลดที่นี่ซึ่งคือการหลีกเลี่ยงการเข้าถึงโดยตรงโดยผู้อื่น
1. รับเส้นทางที่แท้จริงของไฟล์
string storePath = getServletContext (). getRealPath ("/web-inf/files");
2. ตั้งค่าสภาพแวดล้อม
DiskFileItemFactory Factory = ใหม่ DiskFileItemFactory (); // สถานที่ตั้งแคชเริ่มต้นและสถานที่จัดเก็บไฟล์ชั่วคราวอยู่ที่ไหน
3. วิธีการจัดส่งแบบฟอร์มแบบฟอร์ม
บูลีน ismultipart = servletfileupload.ismultipartcontent (คำขอ); if (! ismultipart) {system.out.println ("วิธีการอัปโหลดผิด!"); กลับ; -4. ไฟล์อัพโหลด File
ServletFileUpload Upload = ใหม่ servletFilePilePload (โรงงาน); 5. Analyze // Parse List <FileItem> items = upload.parserequest (คำขอ); สำหรับ (FileItem item: items) {if (item.isformfield ()) {// ฟิลด์ปกติ, สตริงฟิลด์ชื่อที่ส่งโดยแบบฟอร์ม = item.getfieldName (); // ชื่อฟิลด์ของฟอร์มข้อมูลสตริงฟิลด์ Value = item.getString (); // ฟอร์มข้อมูลฟิลด์ค่าฟิลด์ค่า System.out.println (fieldName+"="+fieldValue); } // การประมวลผลไฟล์ {inputStream ใน = item.getInputStream (); // อัปโหลดชื่อไฟล์ c: /users/administrator/desktop/a.txt ชื่อสตริง = item.getName (); // เพียงแค่ต้องการ A.txt String filename = name.substring (name.lastindexof ("//")+1); // สร้างสตริงสตรีมเอาท์พุท storeFile = StorePath+"//"+filename; // อัปโหลดไฟล์บันทึกที่อยู่ของไฟล์ outputStream out = ใหม่ fileOutputStream (storeFile); ไบต์ [] b = ไบต์ใหม่ [1024]; int len = -1; ในขณะที่ ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // ปิดสตรีม out.close (); -เขียนแบบฟอร์ม
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+"getServerName ()+": " "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basepath%>"> <title> jsp '1.jsp' ของฉันเริ่มต้น </title> <meta http-equiv = "pragma content = "no-cache"> <meta http-equiv = "Expires" content = "0"> <meta http-equiv = "คำหลัก" content = "keyword1, keyword2, keyword3"> <meta http-equiv = "คำอธิบาย" href = "styles.css">-> </head> <body> <form action = "$ {pageContext.request.contextpath}/servlet/uploadservlet2" method = "post" enctype = "multipart/form-data" name = "f1"/> <br/> <input type = "file" name = "f2"/> <br/> <input type = "submit" value = "save"/> </form> </body> </html>เขียน servlet submission: uploadservlet2
แพ็คเกจ com.liuzhen.upload; นำเข้า java.io.fileoutputStream; นำเข้า java.ioexception; นำเข้า java.io.InputStream; นำเข้า Java.io.OutputStream; นำเข้า Java.util.list; นำเข้า Javax.servlet.servletex javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.commons.fileupload.fileitem; นำเข้า org.apache.Commons.fileupload org.apache.commons.fileupload.disk.diskfileitemfactory; นำเข้า org.apache.commons.fileupload.servlet.servletfileupload; ServleTexception, iOexception {// ตั้งค่าคำขอเข้ารหัส Setcharacterencoding ("UTF-8"); Response.setContentType ("ข้อความ/html; charset = utf-8"); ลอง {// อัปโหลดสตริงไฟล์ storePath = getServletContext (). getRealPath ("/web-inf/files"); // ตั้งค่าสภาพแวดล้อม diskfileitemfactory โรงงาน = ใหม่ diskfileitemfactory (); // ผู้ตัดสินแบบฟอร์มวิธีการส่งแบบฟอร์ม enctype = multipart/form-data บูลีน ismultipart = servletFilePartIpload.ismultipartContent (คำขอ); if (! ismultipart) {system.out.println ("วิธีการอัปโหลดไม่ถูกต้อง!"); กลับ; } servletFileUpload upload = ใหม่ servletFileUpload (โรงงาน); // รายการแยกวิเคราะห์ <fileItem> items = upload.parserequest (คำขอ); สำหรับ (FileItem item: items) {if (item.isformfield ()) {// ฟิลด์ปกติ, สตริงฟิลด์ชื่อที่ส่งโดยแบบฟอร์ม = item.getfieldName (); // ชื่อฟิลด์ของฟอร์มข้อมูลสตริงฟิลด์ Value = item.getString (); // ฟอร์มข้อมูลฟิลด์ค่าฟิลด์ค่า System.out.println (fieldName+"="+fieldValue); } // การประมวลผลไฟล์ {inputStream ใน = item.getInputStream (); // อัปโหลดชื่อไฟล์ c: /users/administrator/desktop/a.txt ชื่อสตริง = item.getName (); // เพียงแค่ต้องการ A.txt String filename = name.substring (name.lastindexof ("//")+1); // สร้างสตริงสตรีมเอาท์พุท storeFile = StorePath+"//"+filename; // อัปโหลดไฟล์บันทึกที่อยู่ของไฟล์ outputStream out = ใหม่ fileOutputStream (storeFile); ไบต์ [] b = ไบต์ใหม่ [1024]; int len = -1; ในขณะที่ ((len = in.read (b))! =-1) {out.write (b, 0, len); } in.close (); // ปิดสตรีม out.close (); }}} catch (fileuploadexception e) {โยน runtimeException ใหม่ (e); }} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบกลับ); -ไฟล์ที่อัปโหลดอยู่ในแอปพลิเคชัน Tomcat
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น