ในส่วนก่อนหน้านี้เราทำหน้าที่ของการเพิ่มและอัปเดตผลิตภัณฑ์ให้เสร็จสมบูรณ์ ทั้งสองส่วนนี้เกี่ยวข้องกับการอัปโหลดรูปภาพผลิตภัณฑ์และไม่มีคำอธิบายโดยละเอียด ด้วยเหตุนี้บทความนี้จึงแนะนำฟังก์ชั่นของ Struts2 เพื่อใช้การอัปโหลดไฟล์
1. ห่อหุ้มข้อมูลไฟล์
ก่อนอื่นเราต้องมีแบบจำลองเพื่อห่อหุ้มข้อมูลไฟล์ โมเดลนี้ต้องการสามแอตทริบิวต์: ไฟล์ประเภทไฟล์และชื่อไฟล์ สำหรับรูปภาพที่เราต้องการผ่านเราสร้างโมเดลใหม่ดังนี้:
FileImage คลาสสาธารณะ {ไฟล์ไฟล์ส่วนตัว; สตริงส่วนตัว ContentType; ชื่อไฟล์สตริงส่วนตัว; ไฟล์สาธารณะ getFile () {return file; } สตริงสาธารณะ getContentType () {return contentType; } สตริงสาธารณะ getFilename () {return filename; } โมฆะสาธารณะ setupload (ไฟล์ไฟล์) {// วิธีการตั้งค่าไม่สามารถเหมือนกับชื่อแอตทริบิวต์ แต่พารามิเตอร์เมื่อส่งผ่านจากเบื้องหน้าจะต้องเหมือนกับชื่อเมธอดที่ตั้งไว้ นั่นคือพารามิเตอร์ที่ส่งผ่านในเบื้องหน้าคือ fileimage.upload this.file = ไฟล์; } โมฆะสาธารณะ setuploadContentType (สตริง contentType) {this.contentType = contentType; } โมฆะสาธารณะ setuploadfilename (ชื่อไฟล์สตริง) {this.filename = filename; -ด้วยวิธีนี้แบบจำลองนี้เขียนขึ้น เมื่อพิจารณาว่าตรรกะของการอัปโหลดไฟล์นั้นไม่ได้เป็นเอกลักษณ์ของการกระทำเดียวเราเขียนตรรกะของการอัปโหลดไฟล์ลงในคลาสเครื่องมือเพื่อให้สามารถเรียกใช้การกระทำทั้งหมดได้ ดังนั้นเราจึงสร้างคลาสเครื่องมืออัปโหลดไฟล์ใหม่ (สำหรับการเขียนโปรแกรมอินเตอร์เฟสเรายังแยกอินเทอร์เฟซคลาสเครื่องมือ):
2. คลาสเครื่องมืออัปโหลดไฟล์ที่สมบูรณ์
// ไฟล์อัพโหลดเครื่องมือคลาสอินเตอร์เฟสสาธารณะอินเตอร์เฟส fileupload {// ใช้ฟังก์ชั่นของการอัปโหลดไฟล์ส่งคืนชื่อไฟล์ใหม่หลังจากอัปโหลดสตริงนามธรรมสาธารณะ uploadFile (fileImage fileImage); } // ไฟล์อัพโหลดไฟล์คลาสการใช้งานการใช้งานเฉพาะ @component ("fileupload") คลาสสาธารณะคลาส FilePloadUtil ใช้ fileupload {สตริงส่วนตัว filePath; @value ("#{prop.filepath}") //@value หมายถึงการค้นหาถั่วด้วย id = "prop" ในไฟล์ beans.xml มันอ่านไฟล์กำหนดค่าคุณสมบัติผ่านคำอธิบายประกอบจากนั้นอ่านค่าของ key = filePath ในไฟล์กำหนดค่าที่สอดคล้องกันโมฆะ setFilePath (String filePath) {System.out.println (filePath); this.filepath = filePath; } // 1 รับส่วนขยายส่วนตัวสตริง getFileExt (ชื่อไฟล์สตริง) {return filenameutils.getExtension (ชื่อไฟล์); } // 2 สร้างหมายเลข UUID แบบสุ่มเป็นชื่อไฟล์ใหม่สตริงส่วนตัว newFileName (ชื่อสตริงไฟล์) {สตริง ext = getFileExt (ชื่อไฟล์); return uuid.randomuuid (). toString () + "." + ext; } // ใช้ฟังก์ชั่นของการอัปโหลดไฟล์ส่งคืนชื่อไฟล์ใหม่หลังจากอัปโหลด @Override สตริงสาธารณะ uploadFile (fileImage fileImage) {// รับสตริงชื่อไฟล์ที่ไม่ซ้ำกันใหม่ pic = newFileName (fileImage.getFilename ()); ลอง {fileUtil.CopyFile (fileImage.getFile (), ไฟล์ใหม่ (FilePath, PIC)); // พารามิเตอร์แรกคือไฟล์ที่อัปโหลดและพารามิเตอร์ที่สองคือการคัดลอกไฟล์ไปยัง PATH RETURN PIC ใหม่ } catch (exception e) {โยน runtimeException ใหม่ (e); } ในที่สุด {fileImage.getFile (). ลบ (); -มีคำอธิบายประกอบ @Value ด้านบนซึ่งคือการได้รับเส้นทางที่ไฟล์จะถูกเก็บไว้จากไฟล์คุณสมบัติ สำหรับรายละเอียดโปรดดูที่: สปริงเพื่อรับข้อมูลไฟล์การกำหนดค่า
3. การฉีดคลาสไฟล์ที่ห่อหุ้มและคลาสเครื่องมือในการดำเนินการ
หลังจากเขียนคลาสการห่อหุ้มไฟล์และคลาสเครื่องมืออัปโหลดไฟล์เราจำเป็นต้องฉีดวัตถุทั้งสองนี้ลงในการกระทำของเราเพื่อให้สามารถใช้ฟังก์ชันการอัปโหลดไฟล์ในการดำเนินการ:
@Controller ("baseaction") @scope ("prototype") ระดับสาธารณะ Baseaction <t> ขยายการดำเนินการ unpressulement requestaware, sessionaware, applicationaware, modeldriven <t> {// fileimage fileimage ที่ได้รับการป้องกัน; // อัปโหลดคลาสเครื่องมือไฟล์ @Resource FileUpload FileUpload; public fileImage getFileImage () {return fileImage; } โมฆะสาธารณะ setFileImage (fileImage fileImage) {this.fileImage = fileImage; } // ละเว้นรหัสที่ไม่เกี่ยวข้องอื่น ๆ ... } 4. ใช้การอัปโหลดไฟล์
โอเคตอนนี้เราสามารถใช้ไฟล์อัปโหลดใน ProductAction หากคลาสเครื่องมือถูกเขียนจำนวนรหัสในการดำเนินการจะมีขนาดเล็กมากซึ่งเป็นข้อได้เปรียบที่เกิดจากการห่อหุ้ม
@controller ("productaction") @scope ("prototype") การผลิตชั้นเรียนสาธารณะขยาย baseaction <ductions> {// ละเว้นรหัสที่ไม่เกี่ยวข้องอื่น ๆ ... โมฆะสาธารณะบันทึก () โยนข้อยกเว้น {// คลาสเครื่องมือ fileupload ถูกดึงออกมา model.setpic (pic); model.setDate (วันที่ใหม่ ()); System.out.println (รุ่น); // ข้อมูลผลิตภัณฑ์ถูกเก็บไว้ใน Productservice.save (รุ่น); } โมฆะสาธารณะอัปเดต () {string pic = fileupload.uploadfile (fileimage); model.setpic (pic); model.setDate (วันที่ใหม่ ()); System.out.println (รุ่น); // อัปเดตผลิตภัณฑ์ Productservice.update (รุ่น); -ด้วยวิธีนี้เราทำฟังก์ชั่นการอัปโหลดไฟล์จากแผนกต้อนรับ
ที่อยู่ดั้งเดิม: http://blog.csdn.net/eson_15/article/details/51366384
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น