โดยทั่วไปเมื่อใช้ servlet เพื่อประมวลผลองค์ประกอบแบบฟอร์มองค์ประกอบแบบฟอร์มเป็นข้อความที่เรียบง่ายทั้งหมดและ servlets นั้นง่ายต่อการประมวลผลด้วย request.getParameter () แต่เมื่อแบบฟอร์มมีมากกว่าข้อความง่าย ๆ บางอย่างเช่นการอัปโหลดฟิลด์ไฟล์มันยังคงเป็นงานที่ซับซ้อนมากในการแยกวิเคราะห์แต่ละส่วนย่อยของแบบฟอร์มคอมโพสิตโดยตรงจากวัตถุ HttpservletRequest
เพื่อลดความซับซ้อนของการประมวลผลข้อมูลประเภท "multipart/form-data" ส่วนประกอบที่สอดคล้องกันสามารถใช้สำหรับการประมวลผลซึ่งสามารถบันทึกการเข้ารหัสจำนวนมากรองรับการใช้ซ้ำและยังมีประสิทธิภาพมาก
นอกจากนี้ยังมีส่วนประกอบ Java บางส่วน: fileupload, smartupload, cos, ฯลฯ บทความนี้จะอธิบายด้วย fileupload ของ Apache
หากต้องการใช้ FilePload คุณควรดาวน์โหลดส่วนประกอบที่เกี่ยวข้องก่อน:
1. fileupload แพ็คเกจ: http://commons.apache.org/fileupload/
2.IO แพ็คเกจ: http://commons.apache.org/io/
หลังจากดาวน์โหลดแล้วคลายซิปแพ็คเกจ zip และคัดลอก Commons-FilePiLoad-1.2.1.jar และ Commons-io-1.4.jar ไปยัง WebApp/Web-inf/Lib ของ Tomcat
1. หน้าแบบฟอร์ม (เพื่อระบุ enctype = "multipart/form -data" ของแบบฟอร์ม) - upload.html
<html> <head> <title> upload </title> </head> <body> <form name = "uploadform" method = "post" enctype = "multipart/form-data" action = "upload"> <table> <tr> <td> </td> </tr> <tr> <td> <div align = "ขวา"> อัปโหลดไฟล์ 1: </div> </td> <td> <อินพุต type = "file" name = "file1" size = "30"/> </td> </tr> <tr> <td> <td> <td> <td> name = "file2" size = "30"/> </td> </tr> <tr> <td> <type อินพุต = "ส่ง" name = "submit" value = "upload"> </td> <td> <อินพุต type = "reset" name = "reset" value = "Reset"> </td>
2. แบบฟอร์มการประมวลผล servlet - UploadServlet
แพ็คเกจ mypack; นำเข้า Javax.servlet.*; นำเข้า Javax.servlet.http.*; นำเข้า Java.io.*; นำเข้า Java.util.*; นำเข้า org.apache.Commons.FileUpload. UploadServlet ขยาย httpservlet {สตริงส่วนตัว filepath; // ไดเรกทอรีที่ไฟล์ที่อัปโหลดเป็นสตริงส่วนตัว tempfilepath; // ไดเรกทอรีที่ไฟล์ชั่วคราวถูกจัดเก็บโมฆะสาธารณะ init (servletConfig config) พ่น servletexception {super.init (config); filePath = config.getInitParameter ("filePath"); TempFilePath = config.getInitParameter ("TempFilePath"); filePath = getServletContext (). getRealPath (filePath); tempFilePath = getServletContext (). getRealPath (tempFilePath); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {response.setContentType ("ข้อความ/ธรรมดา"); // ส่งการตอบสนองไปยังไคลเอนต์ PrintWriter Outnet = Response.getWriter (); ลอง {// สร้างโรงงาน FileItem ที่ใช้ฮาร์ดดิสก์ DiskFileItemFactory โรงงาน = ใหม่ DiskFileItemFactory (); // ตั้งค่าขนาดของบัฟเฟอร์ที่ใช้ในการเขียนข้อมูลไปยังฮาร์ดดิสก์นี่คือ 4K Factory.SetSizEthreshold (4*1024); // ตั้งค่า Directory Factory.SetRepository (ไฟล์ใหม่ (TempFilePath)); // สร้างตัวประมวลผลการอัปโหลดไฟล์ servletFilePilePileLoad upload = ใหม่ servletFileUpload (โรงงาน); // ตั้งค่าขนาดสูงสุดของไฟล์ที่ได้รับอนุญาตให้อัปโหลดนี่คือการอัปโหลด 4m SetsizeMax (4*1024*1024); รายการ / * fileItem * / items = upload.parserequest (คำขอ); Iterator iter = items.iterator (); ในขณะที่ (iter.hasnext ()) {fileItem item = (fileItem) iter.next (); if (item.isformfield ()) {processFormfield (item, outnet); // จัดการฟิลด์แบบฟอร์มสามัญ} else {processUploadedFile (item, outnet); // จัดการไฟล์อัปโหลด}} outnet.close (); } catch (exception e) {โยน servletexception ใหม่ (e); }} โมฆะส่วนตัว ProcessFormfield (รายการ FileItem, PrintWriter Outnet) {string name = item.getFieldName (); ค่าสตริง = item.getString (); outnet.println (ชื่อ+":"+value+"/r/n"); } โมฆะส่วนตัว ProcessUploadedFile (รายการ fileItem, printWriter Outnet) พ่นข้อยกเว้น {สตริง filename = item.getName (); int index = filename.lastindexof ("//"); filename = filename.substring (ดัชนี+1, filename.length ()); Long Filesize = item.getSize (); if (filename.equals ("") && filesize == 0) return; ไฟล์ uploadedFile = ไฟล์ใหม่ (filePath+"/"+ชื่อไฟล์); item.write (uploadedFile); outnet.println (ชื่อไฟล์+"ถูกบันทึกไว้"); outnet.println ("ขนาดของ"+filename+"คือ"+filesize+"/r/n"); - servlet ถูกกำหนดค่าใน web.xml เป็น:
<servlet> <servlet-name> อัปโหลด </servlet-name> <servlet-class> mypack.uploadservlet </servlet-class> <init-param> <param-name> filepath </param-name> <param-value> store <param-value> temp </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> อัปโหลด </servlet-name> <url-pattern>/อัปโหลด </url-pattern>
ณ จุดนี้ฟังก์ชั่นการอัปโหลดไฟล์อย่างง่ายเสร็จแล้ว - เข้าถึงหน้าฟอร์มเลือกไฟล์และคลิกอัปโหลดไฟล์ หากคุณต้องการบันทึกไฟล์ไปยังฐานข้อมูลในขณะที่อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์คุณสามารถบันทึกชื่อไฟล์ลงในฐานข้อมูลหลังจากได้รับชื่อไฟล์เพื่อให้คุณสามารถเลือกไฟล์ของผู้ใช้ตามชื่อไฟล์ในอนาคต!
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น