การอัปโหลดไฟล์เป็นเรื่องธรรมดามากในเว็บแอปพลิเคชัน มันง่ายมากที่จะใช้ฟังก์ชั่นการอัปโหลดไฟล์ในสภาพแวดล้อมเว็บ Java เนื่องจากมีส่วนประกอบมากมายที่พัฒนาขึ้นใน Java สำหรับการอัปโหลดไฟล์บนอินเทอร์เน็ต บทความนี้ใช้ส่วนประกอบคอมมอนส์-ฟิลด์อัปโหลดมากที่สุดเป็นตัวอย่างเพื่อสาธิตวิธีเพิ่มฟังก์ชั่นการอัปโหลดไฟล์ไปยังแอปพลิเคชันเว็บ Java
คอมโพเนนต์คอมมอนส์-ฟีลพัลโหลดเป็นหนึ่งในโครงการโอเพ่นซอร์สของ Apache และสามารถดาวน์โหลดได้จาก http://commons.apache.org/fileupload/ ส่วนประกอบนี้ใช้งานง่ายและใช้งานง่ายช่วยให้คุณอัปโหลดไฟล์หนึ่งไฟล์ขึ้นไปในแต่ละครั้งและสามารถ จำกัด ขนาดไฟล์
หลังจากดาวน์โหลดแล้วคลายซิปแพ็คเกจซิปและคัดลอก Commons-FileUpload-1.x.jar ไปยัง WebApps ของ Tomcat/WebApp/Web-inf/lib/ หากไดเรกทอรีไม่มีอยู่โปรดสร้างไดเรกทอรีของคุณเอง
สร้าง uploadservlet.java ใหม่สำหรับการอัปโหลดไฟล์:
แพ็คเกจ com.liaoxuefeng.web; public class fileuploadservlet ขยาย httpservlet {สตริงส่วนตัว uploaddir = "c: // temp"; @Override void dopost (httpservletrequest req, httpservletResponse resp) โยน servletexception, ioexception {// todo:}}เมื่อ servlet ได้รับคำขอโพสต์ที่ออกโดยเบราว์เซอร์จะใช้ไฟล์อัพโหลดในวิธี DOPOST () เราจำเป็นต้องสำรวจ FileItemiterator และรับ FileItemStream แต่ละรายการ:
@OverrideProtected void dopost (httpservletrequest req, httpservletResponse resp) พ่น servletexception, ioexception {ลอง {servletfileupload upload = ใหม่ servletFileUpload (); // ตั้งค่าขนาดไฟล์สูงสุดเป็น 1 MB: upload.setFilesizeMax (1024 * 1024); fileItemiterator it = upload.getItemiterator (req); // จัดการกับแต่ละไฟล์: ในขณะที่ (it.hasnext ()) {fileItemstream item = it.next (); if (! item.isformfield ()) {// มันคือการอัปโหลดไฟล์: HandleFileItem (รายการ); }} req.getRequestDispatcher ("success.jsp"). forward (req, resp); } catch (fileuploadexception e) {โยน servletexception ใหม่ ("ไม่สามารถอัปโหลดไฟล์", e); -อ่านสตรีมอินพุตของไฟล์ที่อัปโหลดในเมธอด HandleFileItem () จากนั้นเขียนไปยัง UploadDir และชื่อไฟล์จะถูกสร้างขึ้นแบบสุ่มโดย UUID:
Void HandleFileItem (รายการ fileItemStream) พ่น IOException {system.out.println ("อัปโหลดไฟล์:" + item.getName ()); ไฟล์ newuploadfile = ไฟล์ใหม่ (uploaddir + "/" + uuid.randomuuid (). toString ()); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [4096]; อินพุตสตรีมอินพุต = null; เอาท์พุทเอาท์พุท = null; ลอง {input = item.openstream (); output = ใหม่ bufferedOutputStream (ใหม่ fileOutputStream (newuploadFile)); สำหรับ (;;) {int n = input.read (บัฟเฟอร์); if (n == (-1)) break; output.write (บัฟเฟอร์, 0, n); }} ในที่สุด {ถ้า (อินพุต! = null) {ลอง {input.close (); } catch (ioexception e) {}}}หากคุณต้องการอ่านโฟลเดอร์อัปโหลดที่ระบุในไฟล์การกำหนดค่า web.xml คุณสามารถเริ่มต้นในเมธอด init ():
@OverridePublic เป็นโมฆะ init (servletConfig config) พ่น servletexception {super.init (config); this.uploaddir = config.getInitParameter ("dir");}สุดท้ายกำหนดค่า servlet ใน web.xml:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype web-app public "-// Sun Microsystems, Inc.//dtd Web Application 2.3 // en" "http://java.sun.com/dtd/web-app-_2_3 <servlet-name> uploadservlet </servlet-name> <servlet-class> com.liaoxuefeng.web.fileuploadservlet </servlet-class> </servlet> <servlet-mapping>
หลังจากกำหนดค่า servlet ให้เริ่ม Tomcat หรือเรซินและเขียน index.htm test อย่างง่าย ๆ :
<html> <body> <p> demo fileuploadservlet </p> <form name = "form1" action = "upload" method = "post" enctype = "multipart/form-data"> <input type = "file" name = "ไฟล์"/>
โปรดทราบว่า action = "upload" ระบุ URL การแมปของ fileuploadServlet ที่จัดการไฟล์ที่อัปโหลด
เมื่อการอัปโหลดประสบความสำเร็จ Success.jsp จะปรากฏขึ้นมิฉะนั้นจะมีการโยนข้อยกเว้น หากขนาดไฟล์ที่อัปโหลดเกิน 1MB ที่เราตั้งไว้เราจะได้รับ FilesIzElimitexceedEdException
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น