JSP สามารถอัพโหลดไฟล์ไปยังเซิร์ฟเวอร์ผ่านแบบฟอร์ม HTML ประเภทไฟล์อาจเป็นไฟล์ข้อความ ไฟล์ไบนารี ไฟล์รูปภาพ หรือเอกสารอื่นๆ
ต่อไปเราใช้แท็ก HTML เพื่อสร้างแบบฟอร์มการอัปโหลดไฟล์ ควรสังเกตประเด็นต่อไปนี้:
ต้องตั้งค่าแอตทริบิวต์ของวิธีการแบบฟอร์มเป็นวิธี POST และไม่สามารถใช้วิธี GET ได้
ต้องตั้งค่าแอตทริบิวต์ form enctype ให้เป็น multipart/form-data
แอตทริบิวต์การกระทำของแบบฟอร์มจะต้องตั้งค่าเป็นที่อยู่ไฟล์ jsp ที่ส่งไปยังพื้นหลังสำหรับการอัปโหลดไฟล์ ตัวอย่างเช่น ไฟล์โปรแกรม uploadFile.jsp ใช้เพื่อประมวลผลไฟล์ที่อัพโหลด
หากต้องการอัปโหลดองค์ประกอบไฟล์ คุณต้องใช้แท็ก <input .../> และตั้งค่าแอตทริบิวต์เป็น type="file" หากคุณต้องการอัปโหลดหลายไฟล์ คุณสามารถตั้งชื่อที่แตกต่างกันได้ในแท็ก <input .../>
ต่อไปนี้เป็นแบบฟอร์มสำหรับการอัปโหลดไฟล์
<html><head><title>แบบฟอร์มการอัพโหลดไฟล์</title></head><body><h3>การอัพโหลดไฟล์:</h3>เลือกไฟล์ที่จะอัพโหลด: <br /><form action="UploadServlet" method="post" enctype="multipart/form-data"><input type="file" name="file" size="50" /><br /><input type="submit" value="อัปโหลดไฟล์ " /></รูปแบบ></ร่างกาย></html>เข้าถึงไฟล์ในเบราว์เซอร์ท้องถิ่นของคุณ อินเทอร์เฟซการแสดงผลจะเป็นดังนี้ เมื่อคุณคลิก "อัปโหลดไฟล์" หน้าต่างจะปรากฏขึ้นเพื่อให้คุณเลือกไฟล์ที่จะอัปโหลด:
ขั้นแรก อันดับแรกเรากำหนดตำแหน่งที่เก็บไฟล์ไว้ในบริการหลังจากอัปโหลด คุณสามารถเขียนเส้นทางในโปรแกรมของคุณ หรือเราจะตั้งค่าไดเร็กทอรีที่จะเก็บไฟล์โดยการตั้งค่าองค์ประกอบ context-param ใน web.xml ไฟล์การกำหนดค่าดังต่อไปนี้แสดง:
<web-app>....<context-param> <description>ที่อยู่การอัพโหลดไฟล์</description> <param-name>ไฟล์อัพโหลด</param-name> <param-value> c:apache-tomcat- 5.5.29webappsdata </param-value> </context-param>....</web-app>
ไฟล์สคริปต์ต่อไปนี้ UploadFile.jsp สามารถจัดการไฟล์ที่อัปโหลดได้หลายไฟล์ ก่อนที่จะใช้สคริปต์นี้ เราต้องใส่ใจกับประเด็นต่อไปนี้:
ตัวอย่างต่อไปนี้อาศัย FileUpload ดังนั้นคุณต้องแนะนำไฟล์แพ็กเกจ commons-fileupload.xxjar ล่าสุดใน classpath ของคุณ ที่อยู่ดาวน์โหลดคือ: http://commons.apache.org/fileupload/
FileUpload อาศัย Commons IO ดังนั้นคุณจึงต้องแนะนำ commons-io-xxjar ล่าสุดใน classpath ของคุณ ที่อยู่ดาวน์โหลดคือ: http://commons.apache.org/io/
เมื่อทดสอบตัวอย่างต่อไปนี้ คุณต้องอัปโหลดและยืนยันว่าขนาดของไฟล์ที่อัปโหลดนั้นเล็กกว่าขนาดที่กำหนดโดยตัวแปร maxFileSize ไม่เช่นนั้นจะไม่สามารถอัปโหลดไฟล์ได้สำเร็จ
ตรวจสอบให้แน่ใจว่าคุณได้สร้างไดเร็กทอรี c:temp และ c:apache-tomcat-5.5.29webappsdata
<%@ เพจ import="java.io.*,java.util.*, javax.servlet.*" %><%@ เพจ import="javax.servlet.http.*" %><%@ เพจ import= "org.apache.commons.fileupload.*" %><%@ หน้า import="org.apache.commons.fileupload.disk.*" %><%@ หน้า import="org.apache.commons.fileupload.servlet.*" %><%@ page import="org.apache.commons.io.output.*" %><% ไฟล์ไฟล์; int maxFileSize = 5000 * 1024; int maxMemSize = 5,000 * 1,024; บริบท ServletContext = pageContext.getServletContext(); context.getInitParameter("file-upload"); // ตรวจสอบประเภทของเนื้อหาที่อัพโหลด String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory โรงงาน = ใหม่ DiskFileItemFactory(); // ตั้งค่าสูงสุดของไฟล์ที่เก็บไว้ในโรงงานหน่วยความจำ setSizeThreshold(maxMemSize); ข้อมูลที่จัดเก็บไว้ในเครื่องมีขนาดใหญ่กว่า maxMemSize Factory.setRepository(ไฟล์ใหม่ ("c:\temp")); // สร้างตัวจัดการการอัปโหลดไฟล์ใหม่ ServletFileUpload upload = new ServletFileUpload(factory); // ตั้งค่าขนาดไฟล์สูงสุดที่อัปโหลด upload.setSizeMax( maxFileSize ); ลอง { // แยกวิเคราะห์รายการไฟล์ที่ได้รับ fileItems = upload.parseRequest (คำขอ); ประมวลผลไฟล์ที่อัพโหลด Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<head>"); out.println("<title>JSP File upload</title> " ); out.println("</head>"); out.println("<body>"); ในขณะที่ ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // รับพารามิเตอร์ของไฟล์ที่อัพโหลด String fieldName = fi.getFieldName(); String fileName = fi.getName(); .isInMemory (); long sizeInBytes = fi.getSize(); // เขียนลงไฟล์ if( fileName.lastIndexOf("\") >= 0 ){ file = ไฟล์ใหม่( filePath , fileName.substring( fileName.lastIndexOf("\"))) ; }else{ file = new File( filePath , fileName.substring(fileName.lastIndexOf("\")+1)) ; fi.write( file ) ; out.println("ชื่อไฟล์ที่อัพโหลด: " + filePath + fileName + "<br>"); out.println("</body>"); out.println("</html>"); }catch(ข้อยกเว้น เช่น) { System.out.println(ex); } }else{ out.println("< html>"); out.println("<head>"); out.println("<title>อัปโหลดเซิร์ฟเล็ต</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>ไม่มีการอัพโหลดไฟล์</p>"); out.println("</body>"); out.println("</html> "); }%>
ต่อไป ให้เราเข้าถึง http://localhost:8080/UploadFile.htm ผ่านเบราว์เซอร์ อินเทอร์เฟซดังที่แสดงด้านล่าง และอัปโหลดไฟล์:
หากสคริปต์ JSP ของคุณทำงานตามปกติ ไฟล์จะถูกอัปโหลดไปที่ c:apache-tomcat-5.5.29webappsdata คุณสามารถเปิดโฟลเดอร์เพื่อดูว่าการอัปโหลดสำเร็จหรือไม่