การอัปโหลดไฟล์เป็นฟังก์ชั่นที่พบบ่อยมากในเว็บไซต์ คุณต้องแยกวิเคราะห์พารามิเตอร์คำขอโดยตรงโดยใช้ servlet เพื่อรับไฟล์ที่อัปโหลดซึ่งค่อนข้างลำบาก ดังนั้นโดยทั่วไปคุณเลือกที่จะใช้เครื่องมือ Open Source Apache, Common-FilePilePload แพ็คเกจ Jar นี้สามารถพบได้บนเว็บไซต์อย่างเป็นทางการของ Apache หรือภายใต้โฟลเดอร์ Lib ของ Struts ฟังก์ชั่นของการอัปโหลด Struts ขึ้นอยู่กับการใช้งานนี้
Common-Fileupload ขึ้นอยู่กับแพ็คเกจ Common-IO ดังนั้นคุณต้องดาวน์โหลดแพ็คเกจนี้ด้วย จากนั้นนำเข้าภายใต้เส้นทางโครงการของคุณ
ใช้รหัสดังนี้
แพ็คเกจ oop.hg.ytu.servlet; นำเข้า Java.io.File; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า java.util.list; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า oop.hu.ytu.dao.uploaddomain; นำเข้า org.apache.Commons.FileUpload.FileItem; นำเข้า org.apache.commons.fileupload.disk.diskfileitemfactory; นำเข้า org.apache.commons.fileupload.servlet.servletFileUpload; การอัปโหลดคลาสสาธารณะขยาย httpservlet { / *** จัดการคำขออัพโหลดผู้ใช้* / ส่วนตัวคงที่สุดท้าย Long SerialVersionUID = 1L; โมฆะสาธารณะ DOGET (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {// string อธิบาย = request.getParameter ("อธิบาย"); โรงงาน DiskFileItemFactory = ใหม่ diskfileitemfactory (); @suppresswarnings ("การเสื่อมสภาพ") เส้นทางสตริง = request.getRealPath ("/อัปโหลด"); // ตั้งค่าดิสก์บัฟเฟอร์พา ธ Path Factory.SetRepository (ไฟล์ใหม่ (เส้นทาง)); Factory.SetSizEthreshold (1024*1024); // ตั้งค่าการสร้างขนาดบัฟเฟอร์ servletFilePilePlioL upload = ใหม่ servletFileUpload (โรงงาน); upload.setSizeMax (-1); // ตั้งค่าขนาดขีด จำกัด ไฟล์อัปโหลด -1 ไม่ จำกัด ลอง {@SuppressWarnings ("ไม่ได้ตรวจสอบ") รายการ <"fileItem> list = upload.parserequest (คำขอ); สตริง va = null; สำหรับ (fileItem item: list) {// string name = item.getFieldName (); if (item.isformfield ()) {// ตัดสินว่าเป็นสตรีมไฟล์ va = item.getString ("UTF-8"); // system.out.println (ชื่อ+"="+va); /// request.setAttribute (ชื่อ, ค่า); } else {string value = item.getName (); // จะผ่านชื่อพา ธ แบบเต็ม int start = value.lastindexof ("//"); String filename = value.SubString (Start+1); // request.setAttribute (ชื่อ, ชื่อไฟล์); inputStream ใน = item.getInputStream (); UploadDomain dao = new uploadDomain (); //item.write( ไฟล์ใหม่ (RealPath, ชื่อไฟล์)); int index = filename.lastindexof ("."); String realfilename = filename.substring (0, ดัชนี); ประเภทสตริง = filename.substring (ดัชนี+1); dao.insert (in, realfilename, type, va); // ใส่ลงในฐานข้อมูล}}} catch (Exception e) {E.printstackTrace (); }} โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบกลับ); - ที่นี่เราตรวจสอบว่าเป็นสตรีมหรือพารามิเตอร์ที่อัปโหลดในแบบฟอร์มเช่นการส่งข้อมูลในกล่องข้อความแล้วแทรกลงในฐานข้อมูล รหัสการแทรกฐานข้อมูลมีดังนี้
แพ็คเกจ oop.hu.ytu.dao; นำเข้า Java.io.InputStream; นำเข้า java.sql.connection; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.resultset; นำเข้า oop.hg.ytu.utils.jdbcutils; /*** ให้การสนับสนุนการอัปโหลดไฟล์* @Author Administrator**/คลาสสาธารณะ UploadDomain {/*** ใส่ไฟล์ที่อัปโหลดลงในฐานข้อมูล*/การแทรกโมฆะสาธารณะ (InputStream ในชื่อ FileName สตริงประเภทสตริง PreparedStatement PS = NULL; ผลลัพธ์ RS = NULL; System.out.println (อธิบาย); ลอง {// 2. สร้างการเชื่อมต่อ conn = jdbcutils.getConnection (); // 3. สร้างสตริงคำสั่ง sql = "แทรกลงใน fileupload (ไฟล์, ชื่อไฟล์, ประเภท, des) ค่า (?,?,?,?)"; ps = conn.prepareStatement (SQL); ps.setblob (1, in); ps.setstring (2, ชื่อไฟล์); ps.setstring (3, ประเภท); ps.setstring (4, อธิบาย); // 4. ดำเนินการคำสั่ง ps.executeUpdate (); in.close (); } ในที่สุด {jdbcutils.free (rs, ps, conn); - คุณอาจพบข้อ จำกัด ขนาดคำถามราคาฐานข้อมูลเริ่มต้น คุณต้องเปลี่ยนการกำหนดค่าต่อไปนี้ภายใต้ my.ini ภายใต้ไดเรกทอรีการติดตั้ง MySQL
[mysqld]
max_allowed_packet = 64m
นั่นคือทั้งหมด แน่นอนให้ความสนใจกับรูปแบบการเข้ารหัส อัปโหลดไฟล์และทำเสร็จ อีกสิ่งหนึ่งคือหนึ่งในชื่อคอลัมน์ของฉันถูกตั้งค่าเพื่ออธิบายและผลลัพธ์คือฉันได้ขัดแย้งกับคำที่สงวนไว้ MySQL และไม่สามารถแทรกข้อมูลได้ คุณต้องให้ความสนใจกับมันในอนาคต
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น