ที่นี่ฉันใช้การอัปโหลดไฟล์แบบอะซิงโครนัสแบบอะซิงโครนัส ฉันไม่ได้พูดเรื่องไร้สาระมากและอัปโหลดรหัส - -
แพ็คเกจ com.future.zfs.util; นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.util.iterator; นำเข้า 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.fileuploadbase.sizelimitexceedeDexception นำเข้า org.apache.commons.fileupload.disk.diskfileitemfactory; นำเข้า org.apache.commons.fileupload.servlet.servlet ขยาย httpservlet {สุดท้ายยาว max_size = 10 * 1024 * 1024; // ตั้งค่าไฟล์ที่อัปโหลดสูงสุดเป็น 10m // รายการรูปแบบไฟล์ที่อนุญาตให้อัปโหลดสตริงสุดท้าย [] lewtype = สตริงใหม่ [] {"jpg", "jpeg", "gif", "txt", "doc", "docx", "mp3", "wma", "m4a", "xls"}; public filePloadServlet () {super (); } โมฆะสาธารณะทำลาย () {super.destroy (); } @Override Void Service (HTTPSERVLETREQUEST Request, HTTPSERVLETRESSESSENTES) พ่น ServleTexception, iOException {Response.SetContentType ("ข้อความ/html"); // ตั้งค่าการเข้ารหัสอักขระเป็น UTF-8 เพื่อให้การตอบสนองของอักขระภาษาจีนแสดงการเข้ารหัส ("UTF-8"); // อินสแตนซ์โรงงานไฟล์ฮาร์ดดิสก์เพื่อกำหนดค่าส่วนประกอบอัปโหลด servletFileUpload diskfileitemfactory dfif = ใหม่ diskfileitemfactory (); dfif.setsizethreshold (4096); // ตั้งค่าขนาดหน่วยความจำที่ใช้ในการจัดเก็บไฟล์ชั่วคราวเมื่ออัปโหลดไฟล์นี่คือ 4K มากกว่าชิ้นส่วนจะมีอยู่ชั่วคราวในฮาร์ดดิสก์ dfif.setRepository (ไฟล์ใหม่ (request.getRealPath ("/") + "uploadTemp")); // ตั้งค่าไดเรกทอรีที่เก็บไฟล์อัพเดตไดเรกทอรี // ตั้งค่าขนาดการอัปโหลดสูงสุด SFU.SetSizeMax (MAX_SIZE); PrintWriter out = response.getWriter (); // รับรายการฟิลด์อัปโหลดทั้งหมดจากรายการคำขอ filelist = null; ลอง {filelist = sfu.parserequest (คำขอ); } catch (fileuploadexception e) {// จัดการขนาดไฟล์ข้อยกเว้นที่มีขนาดใหญ่เกินไปถ้า (e อินสแตนซ์ของ sizelimitexceedeDexception) {out.println ("{ข้อความ: 'ขนาดไฟล์เกินขนาดที่ระบุ:"+max_size+"byte'}"); กลับ; } E.PrintStackTrace (); } // ไม่มีไฟล์อัปโหลดถ้า (fileList == null || fileList.size () == 0) {out.println ("{ข้อความ: 'โปรดเลือกอัปโหลดไฟล์'}"); กลับ; } // รับไฟล์ที่อัปโหลดทั้งหมด iterator fileItr = fileList.iterator (); // วนรอบไฟล์ทั้งหมดในขณะที่ (fileitr.hasnext ()) {fileItem fileItem = null; เส้นทางสตริง = null; ขนาดยาว = 0; // รับไฟล์ปัจจุบัน fileItem = (fileItem) fileitr.next (); // ละเว้นฟิลด์ Form Simple แทนโดเมนไฟล์ของโดเมนที่อัปโหลด (<input type = "text" /> ฯลฯ ) ถ้า (fileItem == null || fileitem.isformfield ()) {ดำเนินการต่อ; } // รับพา ธ แบบเต็มของ path file = fileItem.getName (); // รับขนาดไฟล์ = fileItem.getSize (); if ("" .equals (พา ธ ) || size == 0) {out.println ("{ข้อความ: 'โปรดเลือกอัปโหลดไฟล์'}"); กลับ; } // รับชื่อไฟล์ของสตริงพา ธ ที่ถูกลบ t_name = path.substring (path.lastindexof ("//") + 1); // รับส่วนขยายไฟล์ (ชื่อเต็มจะได้รับโดยไม่มีส่วนขยาย) สตริง t_ext = t_name.substring (t_name.lastindexof (".") + 1); // ปฏิเสธประเภทไฟล์นอกรูปแบบไฟล์ที่ระบุ int lewlflag = 0; int levereDextCount = levertype.length; สำหรับ (; lewalflag <elleDextCount; lewlowflag ++) {ถ้า (lewthype [lewalflag] .equals (t_ext)) break; } if (lewalflag == levereDextCount) {string message = ""; สำหรับ (allowflag = 0; lewalflag <elleDextCount; lewleflag ++) {message+= "* + อนุญาตให้ใช้ [อนุญาตให้ Flag] + ""; } out.println ("{ข้อความ: 'โปรดอัปโหลดไฟล์ประเภทต่อไปนี้"+ข้อความ+"'}"); กลับ; } Long Now = System.currentTimeMillis (); // สร้างชื่อไฟล์ที่บันทึกไว้หลังจากอัปโหลดตามคำนำหน้าสตริงเวลาของระบบ = string.valueof (ตอนนี้); // เส้นทางที่สมบูรณ์ของไฟล์สุดท้ายที่บันทึกไว้จะถูกบันทึกไว้ในไดเรกทอรีอัปโหลดภายใต้ไดเรกทอรีรูทของเว็บ u_name = request.getRealPath ("/") + "อัปโหลด/" + คำนำหน้า + " + t_ext; // เส้นทางชื่อไฟล์ต้นฉบับ = request.getRealPath ("/") + "อัปโหลด/" + พา ธ ; ลอง {// บันทึกไฟล์ fileitem.write (ไฟล์ใหม่ (พา ธ )); Response.SetStatus (200); out.println ("{message:/" การอัปโหลดไฟล์สำเร็จบันทึกเป็น: " + คำนำหน้า +". " + t_ext +" ขนาดไฟล์: " + size +" byte/"}"); } catch (exception e) {e.printstacktrace (); - web.xml
<servlet> <servlet-name> fileuploadservlet </servlet-name> <servlet-lass> com.future.zfs.util.fileuploadservlet </servlet-lass> </servlet> <servlet-mapping> <servlet-name>
หน้าอัปโหลด
<%@ 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"> <title> src = "js/jQuery.js"> </script> <script type = "text/javascript" src = "js/ajaxfileupload.js"> </script> <script type = "text/javascript"> function ajaxfileupload () แสดงภาพเมื่อคุณเริ่มอัปโหลด file.ajaxcomplete (function () {$ (นี่) .hide ();}); // ซ่อนภาพหลังจากอัปโหลดไฟล์ $. ajaxfileupload ({url: 'fileuploadservlet' ไฟล์อัพโหลดไฟล์ <อินพุต type = "file" id = "file" name = "file"/> datatype: 'json', // ประเภทค่าส่งคืนโดยทั่วไปจะตั้งค่าเป็น JSON Success: ฟังก์ชั่น (ข้อมูลสถานะ) // เซิร์ฟเวอร์ตอบสนองต่อฟังก์ชันการประมวลผล {//alert(data.message if (typeof (data.error)! = 'undefined') {ถ้า (data.error! = '') {//alert(data.error); $ ('#myspan'). html (data.message); } else {//alert(data.message); $ ('#myspan'). html (data.message); }}}, ข้อผิดพลาด: ฟังก์ชั่น (ข้อมูล, สถานะ, e) // ฟังก์ชั่นการจัดการความล้มเหลวของเซิร์ฟเวอร์การตอบกลับ {// alert (e); $ ('#myspan'). html (e); }}) ส่งคืนเท็จ; } </script> </head> <body> <img src = "images/loading.gif" id = "โหลด" style = "แสดง: ไม่มี;"> <span style = "สี: สีแดง;" id = "myspan"> </span> <br/> <อินพุต type = "ไฟล์" id = "file" name = "ไฟล์"/> <br/> <อินพุต type = "button" value = "อัปโหลด" onClick = "ส่งคืน ajaxFileUpload () </body> </html> ควรสังเกตว่าเมื่อใช้ ajaxfileupload เพื่ออัปโหลดตาม servlet คุณต้องตั้งค่าการตอบสนอง setContentType ("ข้อความ/html"); แม้ว่าข้อมูลประเภท: 'JSON' ถูกตั้งค่าเป็น JSON แต่คุณยังต้องตั้งค่าการตอบสนอง SetContentType ("ข้อความ/html"); มิฉะนั้นข้อมูลที่ส่งคืนโดยเซิร์ฟเวอร์ไม่สามารถรับได้และกล่องโต้ตอบจะปรากฏขึ้น
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น