ข้อมูลจำเพาะของ Servlet 3.0 HttpservletRequest ได้จัดเตรียมวิธีการอัปโหลดไฟล์ แต่การอัปโหลดดังกล่าวจำเป็นต้องทำใน Servlet Struts2 จัดเตรียมแพ็คเกจที่ง่ายกว่า
Struts2 ใช้เฟรมเวิร์กไฟล์ทั่วไปของจาการ์ตา ดังนั้นการใช้ฟังก์ชั่นการอัปโหลดไฟล์ของ Struts2 คุณต้องเพิ่มแพ็คเกจสองขวดคือ Commons-io-2.2.jar และ Commons-Fileupload -1.3.1.jar
struts2 ตัวอย่างการอัปโหลดไฟล์ง่าย ๆ :
1. หน้าอัปโหลดไฟล์
ในการอัปโหลดไฟล์วิธีการของแบบฟอร์มจะต้องตั้งค่าเป็นโพสต์และ Enctype ถูกตั้งค่าเป็น multipart/form-data เมื่อ enctype ถูกตั้งค่าเป็น multipart/form-data เบราว์เซอร์จะใช้สตรีมไบนารีเพื่อประมวลผลข้อมูลแบบฟอร์ม
<%@ taglib prefix = "s" uri = "/struts-tags"%> <%-สร้างโดย Intellij Idea ผู้ใช้: วันที่ผู้ดูแลระบบ: 2018/1/16 เวลา: 14:06 เพื่อเปลี่ยนไฟล์เทมเพลตนี้ใช้ไฟล์ | การตั้งค่า เทมเพลตไฟล์-%> <%@ page contentType = "text/html; charset = utf-8" language = "java"%> <html> <head> <title> struts2 การอัปโหลดไฟล์ง่าย ๆ </title> </head> <body> label = "เลือกไฟล์"/> <s: submit value = "upload"/> </s: form> </body> </html>
2. ดำเนินการตามคำขออัพโหลด
/** * คำอธิบาย: struts2 การอัปโหลดไฟล์ง่าย ๆ * ผู้แต่ง: Eleven * วันที่: 2018/1/24 10:39 */คลาสสาธารณะ FileAction ขยายการดำเนินการ {// อัปโหลดไฟล์ส่วนตัวอัปโหลด; // อัปโหลดประเภทไฟล์สตริงส่วนตัว UploadContentType; // อัปโหลดชื่อไฟล์สตริงส่วนตัว uploadfilename; // อัปโหลดไฟล์อัพโหลดที่อนุญาตให้ใช้; สตริงส่วนตัวอนุญาตให้ใช้งานแบบไดนามิกใน struts.xml โดยใช้แท็ก param ใน struts.xml; หน้าสตริงสาธารณะ () {return "หน้า"; } โมฆะสาธารณะอัพโหลด () {// อัปโหลด: // 1 อ่านเนื้อหาไฟล์ // 2 เขียนเนื้อหาไฟล์ไปยังไฟล์ที่ระบุลอง {system.out.println ("ไฟล์อัพโหลดที่อนุญาตประเภท ="+levertypes); String realPath = servletActionContext.getServletContext (). getRealPath ("/อัปโหลด"); System.out.println ("เส้นทางสัมบูรณ์ของโครงการ ="+RealPath); // สร้างไฟล์บันทึกไฟล์ใหม่ไฟล์ใหม่ (RealPath) .mkdir (); ไฟล์ไฟล์ = ไฟล์ใหม่ (realpath+"/"+uploadfilename); // สร้าง if (! file.exists ()) {file.createnewfile (); } fileOutputStream out = new fileOutputStream (ไฟล์); FileInputStream ใน = ใหม่ FileInputStream (อัปโหลด); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; int len = 0; // เขียนขณะอ่านและเขียน 1kb ทุกครั้งเขียน 1kb ในขณะที่ ((len = in.read (บัฟเฟอร์))> 0) {out.write (บัฟเฟอร์, 0, len); } system.out.println ("การอัปโหลดไฟล์สำเร็จ ... "); } catch (exception e) {e.printstacktrace (); }} ไฟล์สาธารณะ getUpload () {return upload; } โมฆะสาธารณะ setupload (อัปโหลดไฟล์) {this.upload = อัปโหลด; } สตริงสาธารณะ getUploadContentType () {return uploadContentType; } โมฆะสาธารณะ setuploadContentType (สตริง uploadContentType) {this.uploadContentType = uploadContentType; } สตริงสาธารณะ getUploadFileName () {return uploadfilename; } โมฆะสาธารณะ setUploadFileName (สตริง updoadFileName) {this.uploadFileName = uploadFileName; } สตริงสาธารณะ getallowTypes () {return fellypes; } โมฆะสาธารณะ setallowTypes (String leverTypes) {this.allowTypes = leverTypes; -หากแบบฟอร์มมีฟิลด์ไฟล์ที่มีแอตทริบิวต์ชื่อ XXX การกระทำที่สอดคล้องกันจะต้องใช้ตัวแปรสมาชิกสามตัวเพื่อห่อหุ้มข้อมูลของฟิลด์ไฟล์
ตัวแปรสมาชิก XXX ของประเภทไฟล์ห่อหุ้มเนื้อหาไฟล์ที่สอดคล้องกับฟิลด์ไฟล์
ตัวแปรสมาชิก XXXFILENAME ของประเภทสตริงประเภทห่อหุ้มชื่อไฟล์ของไฟล์ที่สอดคล้องกับฟิลด์ไฟล์
ตัวแปรสมาชิก XXXContentType ของสตริงประเภทห่อหุ้มประเภทไฟล์ของไฟล์ที่สอดคล้องกับฟิลด์ไฟล์
3. กำหนดค่า struts.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype struts สาธารณะ "-// Apache Software Foundation // dtd struts การกำหนดค่า 2.3 // en" "http://struts.apache.org/dtds/struts-2.3.dtd" value = "false"/> <constant name = "struts.devmode" value = "true"/> <package name = "default" namespace = "/" Extref = "struts-default"> <! คุณสมบัติ. นี่คือตัวอย่างในการตั้งค่าประเภทที่อนุญาตให้อัปโหลดไฟล์ แต่โปรแกรมการดำเนินการไม่ได้ทำการประมวลผลมากนัก -> <param name = "levertypes"> image/png, image/gif, image/jpeg </param>
Interceptor ใช้การกรองไฟล์
struts2 จัดเตรียมการสกัดกั้นสำหรับการอัปโหลดไฟล์ fileupload เพื่อให้การสกัดกั้นนี้ทำงานได้การอ้างอิงตัวดักจะต้องกำหนดค่าในการดำเนินการ
เมื่อกำหนดค่า fileupload interceptor คุณสามารถระบุพารามิเตอร์สองตัวสำหรับมัน:
FellyTypes: ประเภทไฟล์ที่อนุญาตให้อัปโหลดโดยคั่นด้วยไฟล์หลายประเภทด้วยเครื่องหมายจุลภาคภาษาอังกฤษ
สูงสุด: ขนาดไฟล์ที่อนุญาตให้อัปโหลดในไบต์
เมื่อการกรองไฟล์ล้มเหลวระบบจะโอนไปยังมุมมองเชิงตรรกะอินพุตโดยอัตโนมัติดังนั้นมุมมองเชิงตรรกะที่ชื่ออินพุตจะต้องกำหนดค่าสำหรับการดำเนินการนี้ นอกจากนี้การอ้างอิง Interceptor ของ DefaultStack จะต้องกำหนดค่าสำหรับการกระทำนี้ตามที่แสดง
ไฟล์การกำหนดค่า struts.xml มีดังนี้:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype struts สาธารณะ "-// Apache Software Foundation // dtd struts การกำหนดค่า 2.3 // en" "http://struts.apache.org/dtds/struts-2.3.dtd" value = "false" /> <constant name = "struts.devmode" value = "true" /> <package name = "default" namespace = " /" Extref = "struts-default"> <!-การอัปโหลดไฟล์-> <action name = "file_*" {1} " name = "fileupload"> <!-ประเภทไฟล์ที่อนุญาต-> <param name = "อนุญาตให้ใช้"> image/png, image/gif, image/jpeg </param> <!-ขนาดไฟล์ที่อนุญาต-> <param name = "maximumsize"> 2000 </param> หน้า-> <name result = "input">/web-inf/jsp/input.jsp </result> <name result = "page">/web-inf/jsp/fileupload.jsp </result> </action>การอัพโหลดไฟล์ interceptor ที่กำหนดค่าไว้ข้างต้นต้องการให้ประเภทการอัปโหลดไฟล์สามารถเป็นไฟล์ภาพเท่านั้นและขนาดไฟล์ไม่สามารถมากกว่า 2,000 ไบต์ หากไฟล์ที่อัปโหลดมีขนาดใหญ่เกินไปหรือประเภทไม่ตรงกันมันจะข้ามไปยังมุมมองเชิงตรรกะอินพุต
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น