ฉันจะไม่พูดเรื่องไร้สาระมากฉันจะโพสต์รหัสให้คุณ รหัสเฉพาะมีดังนี้:
รหัส HTML มีดังนี้:
<body> <อินพุต id = "fileid" type = "file" accept = "video/*; capture = camera" onchange = "onfile (นี่)"> <อินพุต id = "btn" type = "ปุ่ม" value = "ส่ง"> document.getElementById ('fileid'). ไฟล์ [0]); xhr = ใหม่ xmlhttprequest (); xhr.open ("โพสต์", "http: // localhost: 8889/testup/upservlet"); // xhr.setrequestheader ("เนื้อหาประเภท", "charset = utf-8"); xhr.send (fd); xhr.onreadystatechange = processResponse; end data stream end "); if (xhr.status == 200) {var infor = xhr.responsetext; แจ้งเตือน (" การตอบสนองด้านเซิร์ฟเวอร์ = "+infor);}}} </script> </body>รหัส Java มีลักษณะเช่นนี้:
แพ็คเกจ com.yjm.up; นำเข้า java.io.file; นำเข้า java.io.fileoutputstream นำเข้า java.io.ioexception; นำเข้า java.io.inputstream; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.commons.fileupload.fileitem; นำเข้า org.apache.commons.fileupload org.apache.commons.fileupload.servlet.servletFileUpload; คลาสสาธารณะ upservlet ขยาย httpservlet {โมฆะสาธารณะ dopost (httpservletrequest คำขอ httpservletresponse) การอัพเดต filetory ไม่อนุญาตให้เข้าถึงโดยตรงจากโลกภายนอกเพื่อให้แน่ใจว่าความปลอดภัยของสตริงไฟล์ที่อัปโหลดบันทึก savepath = this.getServletContext (). getRealPath ("/web-inf/upload"); ไฟล์ไฟล์ = ไฟล์ใหม่ (บันทึก); system.out.println ("ทดสอบ ... "); {system.out.println (savepath + "ไม่จำเป็นต้องสร้างไดเรกทอรี"); // สร้าง directory file.mkdir ();} // ข้อความแจ้งข้อความสตริง = ""; ลอง {// ใช้ไฟล์อัพโหลดไฟล์วายาท DiskFileItemFactory (); // 2. สร้างไฟล์อัปโหลดตัวแยกวิเคราะห์ servletFilePilePileLoad = ใหม่ servletFileUpload (โรงงาน); // แก้ปัญหาการอัพโหลดภาษาจีนที่อ่านไม่ออก ในแบบดั้งเดิม} // 4 ใช้ตัวแยกวิเคราะห์ servletFilePilePileP เพื่อแยกวิเคราะห์ข้อมูลที่อัปโหลด ผลลัพธ์การแยกวิเคราะห์ส่งคืนรายการ <fileitem> รายการคอลเลกชัน FileItem แต่ละรายการสอดคล้องกับรายการอินพุตของรายการฟอร์มรายการ <fileItem> list = upload.parserequest (คำขอ); สำหรับ (FileItem item: list) {// ถ้าข้อมูลของรายการอินพุตปกติถูกห่อหุ้มใน fileItem ถ้า (item.isformfield ()) {string name = item.getFieldName (); // แก้ปัญหาภาษาจีนที่อ่านไม่ออก String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (ชื่อ + "=" + value);} else {// ถ้ารายการไฟล์ห่อหุ้มไฟล์ที่อัปโหลด (ไฟล์ filename filename.trim (). เท่ากับ ("")) {ดำเนินการต่อ;} // หมายเหตุ: ชื่อไฟล์ที่ส่งโดยเบราว์เซอร์ที่แตกต่างกันจะแตกต่างกัน เบราว์เซอร์บางตัวส่งไฟล์ที่มีพา ธ เช่น: // c: /a/b/1.txt และบางชื่อเป็นเพียงชื่อไฟล์ที่เรียบง่ายเช่น: 1.txt // ประมวลผลส่วนพา ธ ของชื่อไฟล์ของไฟล์ที่ได้รับการอัปโหลดเท่านั้นส่วนหนึ่งชื่อไฟล์จะถูกเก็บไว้ ใน = item.getInputStream (); // สร้างไฟล์ส่งออกไฟล์ FileOutputStream ออก = ใหม่ fileOutputStream (savepath + "//" + filename); // สร้างบัฟเฟอร์บัฟเฟอร์บัฟเฟอร์ [] = นิวไบต์ [1024 * 1024]; // สร้างบัฟเฟอร์บัฟเฟอร์บัฟเฟอร์บัฟเฟอร์ fileOutputStream (savepath + "//" + ชื่อไฟล์); // สร้างบัฟเฟอร์บัฟเฟอร์บัฟเฟอร์ [] = ไบต์ใหม่ [1024 * 1024]; // ตัวระบุของการพิจารณาว่าข้อมูลในสตรีมอินพุตถูกอ่านหรือไม่ (len = in.read (บัฟเฟอร์))> 0 หมายความว่ายังมีข้อมูลอยู่ในขณะที่ ((len = in.read (บัฟเฟอร์))> 0) {// ใช้สตรีมเอาต์พุต FileOutputStream เพื่อเขียนข้อมูลในบัฟเฟอร์ไปยังไดเรกทอรีที่ระบุ in.close (); // ปิดสตรีมเอาต์พุตออก out.close (); // ลบไฟล์ชั่วคราวที่สร้างขึ้นเมื่อประมวลผลไฟล์อัปโหลด item.delete (); message = "การอัปโหลดไฟล์สำเร็จ!";}}} catch (ข้อยกเว้น e) {message = "การอัปโหลดไฟล์ล้มเหลว!"; e.printstacktrace ();}} request.setAttribute ("ข้อความ", ข้อความ); request.getrequestDispatcher ("/message.jsp"แพ็คเกจ java ที่ใช้อัปโหลดมากกว่า 1G
Commons-Fileupload-1.2.1.jar
Commons-io-1.3.2.jar
//xhr.setRequestheader("content-type","application/octet-stream;charset=utf-8 "); ไม่สามารถเพิ่มสิ่งนี้ได้