ขณะนี้มีวิธีการที่ใช้กันทั่วไปสองวิธีสำหรับการอัปโหลดไฟล์หนึ่งวิธีคือ SmartUpload และอีกวิธีหนึ่งคือ Apache's Commons Fileupload
ที่นี่เราแนะนำการใช้งานที่สองเป็นหลัก ก่อนอื่นคุณต้องอัปโหลดไฟล์และให้ความสนใจกับปัญหาหลายประการ:
1 ในแบบฟอร์มให้เพิ่ม Space <input type = "file" name = "myFile">
2 รูปแบบเนื้อหาของแบบฟอร์มควรกำหนดเป็นรูปแบบ multipart/form-data
3 ห้องสมุดคลาสที่จำเป็น: 1 Commons-io.jar 2 Commons-FilePilePoLAT -1.3.1.jar
ต่อไปมาดูการใช้งาน
ก่อนอื่นให้อ่านเอกสารอย่างเป็นทางการของ Apache Commons FilePload และคุณสามารถค้นหาฟังก์ชั่นที่ใช้กันทั่วไปต่อไปนี้:
1 สร้างวัตถุการแยกวิเคราะห์ไฟล์
การคัดลอกรหัสมีดังนี้: diskfileupload diskfileupload = new diskfileupload ();
2 หลังจากแยกวิเคราะห์ไฟล์ใส่ไว้ในรายการ เนื่องจากไลบรารีคลาสนี้รองรับการอัปโหลดหลายไฟล์ผลลัพธ์จะถูกเก็บไว้ในรายการ
การคัดลอกรหัสมีดังนี้: รายการ <fileItem> list = diskFileUpload.parserequest (คำขอ);
3 รับไฟล์อัปโหลดและทำการวิเคราะห์ (ไม่จำเป็น)
การคัดลอกรหัสมีดังนี้: ไฟล์ remotefile = ไฟล์ใหม่ (สตริงใหม่ (fileitem.getName (). getBytes (), "UTF-8"));
4 สร้างวัตถุใหม่และดำเนินการคัดลอกสตรีมมิ่ง
file1 = ไฟล์ใหม่ (this.getServletContext (). getRealPath ("ไฟล์แนบ"), remotefile.getName ()); file1.getParentFile (). mkdirs (); file1.createnewfile (); inputStream ins = fileItem.getInputStream (); OutputStream ous = new fileOutputStream (file1); ลอง {byte [] buffer = byte ใหม่ [1024]; int len = 0; ในขณะที่ ((len = ins.read (บัฟเฟอร์))> -1) ous.write (บัฟเฟอร์, 0, len); out.println ("เพื่อบันทึกไฟล์"+file1.getabsolutepath ()+"<br/>"); } ในที่สุด {ous.close (); ins.close (); -ด้วยวิธีนี้เราทำการอัปโหลดไฟล์ให้เสร็จสมบูรณ์
fileupload.html
<form action = "servlet/uploadservlet" method = "post" enctype = "multipart/form-data"> <div align = "center"> <fieldset> <gelend> ไฟล์อัปโหลด </legend> <br/> <div-div = "left"> ไฟล์อัปโหลด " name = "file1"/> </div> <div align = "left"> อัปโหลด file2 </div> <div align = "left"> <input type = "file" name = "file2"/> </div> <div> <div allign = 'left'> upload ไฟล์คำสั่ง Align = 'left'> upload ไฟล์คำสั่ง 2 </div> <div align = 'left'> <input type = "text" name = "คำอธิบาย 2"/> </div> </div> <div> <div> <div div = 'left'> <อินพุต type = 'submit' value = "ไฟล์อัปโหลด"/>
web.xml
<servlet> <servlet-name> uploadservlet </servlet-name> <servlet-lass> com.test.hello.uploadservlet </servlet-class> </servlet> <servlet-mapping>
uploadservlet.java
แพ็คเกจ com.test.hello; นำเข้า java.io.file; นำเข้า java.io.fileoutputstream; นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; นำเข้า java.io.outputstream; นำเข้า java.io.printwriter; javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; นำเข้า javax.servlet.http.httpservletResponse; นำเข้า org.apache.Commons.FileUpload.diskFilePiLeupload; org.apache.Commons.FileUpload.FileUploAdexception; คลาสสาธารณะ UploadServlet ขยาย httpservlet { /*** ตัวสร้างของวัตถุ */ public uploadServlet () {super (); } /*** การทำลายล้าง servlet <br> */ โมฆะสาธารณะทำลาย () {super.destroy (); // เพียงแค่ใส่สตริง "ทำลาย" ใน log // วางรหัสของคุณที่นี่} /*** วิธี doget ของ servlet <br> * * วิธีนี้เรียกว่าเมื่อแบบฟอร์มมีวิธีแท็กค่าเท่ากับที่จะได้รับ * * @param Request คำขอส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์ * @param การตอบกลับการตอบกลับส่งโดยเซิร์ฟเวอร์ไปยังไคลเอนต์ * @throws servletexception หากเกิดข้อผิดพลาด * @throws ioexception หากเกิดข้อผิดพลาด */ โมฆะสาธารณะ (httpservletrequest repment.tps Response.getWriter (). println ("โปรดอัปโหลดไฟล์ในโพสต์"); } /*** วิธี DOPOST ของ servlet <br> * * วิธีนี้เรียกว่าเมื่อแบบฟอร์มมีวิธีแท็กค่าเท่ากับโพสต์ * * @param คำขอคำขอส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์ * @param ตอบกลับการตอบกลับส่งโดยเซิร์ฟเวอร์ไปยังไคลเอนต์ * @throws servletexception หากเกิดข้อผิดพลาด * @throws ioexception หากเกิดข้อผิดพลาด */ @suppresswarnings ServleteXception, iOexception {ไฟล์ file1 = null, file2 = null; String Description1 = null, description2 = null; Response.Setcharacterencoding ("UTF-8"); request.Setcharacterencoding ("UTF-8"); Response.SetContentType ("ข้อความ/html"); PrintWriter out = response.getWriter (); diskfileupload diskfileupload = new diskfileupload (); ลอง {list <fileItem> list = diskFileUpload.parserequest (คำขอ); out.println ("โอน fileitems ทั้งหมด ... <br/>"); สำหรับ (fileitem fileitem: list) {if (fileitem.isformfield ()) {ถ้า ("คำอธิบาย" .equals (fileitem.getfieldName ())) {out.println ("ถ่ายโอนไปยังคำอธิบาย 1 ... <br/>"); คำอธิบาย 1 = สตริงใหม่ (fileitem.getString (). getBytes (), "UTF-8"); } if ("คำอธิบาย 2" .Equals (fileItem.getFieldName ())) {out.println ("เดินทางไปยังคำอธิบาย 2 ... <br/>"); คำอธิบาย 2 = สตริงใหม่ (fileitem.getString (). getBytes (), "UTF-8"); }} else {if ("file1" .equals (fileItem.getFieldName ())) {ไฟล์ remotefile = ไฟล์ใหม่ (สตริงใหม่ (fileItem.getName (). getBytes (), "UTF-8")); out.println ("เดินทางไปที่ file1 ... <br/>"); out.println ("ตำแหน่งไฟล์ไคลเอนต์:"+RemoteFile.getAbsolutePath ()+"<br/>"); file1 = ไฟล์ใหม่ (this.getServletContext (). getRealPath ("ไฟล์แนบ"), remotefile.getName ()); file1.getParentFile (). mkdirs (); file1.createnewfile (); inputStream ins = fileItem.getInputStream (); OutputStream ous = new fileOutputStream (file1); ลอง {byte [] buffer = byte ใหม่ [1024]; int len = 0; ในขณะที่ ((len = ins.read (บัฟเฟอร์))> -1) ous.write (บัฟเฟอร์, 0, len); out.println ("เพื่อบันทึกไฟล์"+file1.getabsolutepath ()+"<br/>"); } ในที่สุด {ous.close (); ins.close (); }} if ("file2" .equals (fileItem.getFieldName ())) {ไฟล์ remotefile = ไฟล์ใหม่ (สตริงใหม่ (fileitem.getName (). getBytes (), "UTF-8")); out.println ("เดินทางไปที่ file2 ... <br/>"); out.println ("ตำแหน่งไฟล์ไคลเอนต์:"+RemoteFile.getAbsolutePath ()+"<br/>"); file2 = ไฟล์ใหม่ (this.getServletContext (). getRealPath ("ไฟล์แนบ"), RemoteFile.getName ()); file2.getParentFile (). mkdirs (); file2.createnewfile (); inputStream ins = fileItem.getInputStream (); OutputStream ous = new fileOutputStream (file2); ลอง {byte [] buffer = byte ใหม่ [1024]; int len = 0; ในขณะที่ ((len = ins.read (บัฟเฟอร์))> -1) ous.write (บัฟเฟอร์, 0, len); out.println ("เพื่อบันทึกไฟล์"+file2.getabsolutepath ()+"<br/>"); } ในที่สุด {ous.close (); ins.close (); }}} out.println ("การแยกวิเคราะห์คำขอเสร็จสมบูรณ์ <br/> <br/>"); }} catch (fileuploadexception e) {} out.println ("<! doctype html สาธารณะ/"-// w3c // dtd html 4.01 การเปลี่ยนผ่าน // en/">"); out.println ("<head> <title> a servlet </title> </head>"); out.println ("<body>"); if (file1! = null) {out.println ("<div>"); out.println ("<div align = 'left'> file1; </div>"); out.println ("<div align = 'left'> <a href = '"+request.getContextPath ()+"/ไฟล์แนบ/"+file1.getName ()+"' target = _blank>"+file1.getName ()+"</a>"); out.println ("</div>"); out.println ("</div>"); } if (file2! = null) {out.println ("<div align = 'left'> file2; </div>"); out.println ("<div align = 'left'> <a href = '"+request.getContextPath ()+"/ไฟล์แนบ/"+file2.getName ()+"' target = _blank>"+file2.getName ()+"</a>"); out.println ("</div>"); out.println ("</div>"); } out.println ("<div>"); out.println ("<div align = 'left'> คำอธิบาย 1: </div>"); out.println ("<div align = 'left'>"); out.println (คำอธิบาย 1); out.println ("</div>"); out.println ("</div>"); out.println ("</div>"); out.println ("<div align = 'left'> คำอธิบาย 2: </div>"); out.println ("<div align = 'left'> คำอธิบาย 2: </div>"); out.println ("<div align = 'left'>"); out.println ("</div>"); out.println ("</div>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); } /*** การเริ่มต้นของ servlet <br> * * @throws servletexception หากเกิดข้อผิดพลาด */ โมฆะสาธารณะ init () พ่น servletexception {// ใส่รหัสของคุณที่นี่}}}ตัวอย่างการรัน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น