บทความนี้แชร์รหัสการใช้งานเฉพาะสำหรับการอัปโหลดและดาวน์โหลดไฟล์ Struts2 สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
1. การอัปโหลดไฟล์
อัปโหลดส่วนประกอบไฟล์ที่ส่งโดย struts
แผนกต้อนรับ:
1) วิธีการส่งโพสต์
2) ประเภทรูปแบบหลายส่วน/ฟอร์ม-ข้อมูล
3) ประเภทอินพุต = ไฟล์
หลังเวที:
ส่วนประกอบ fileupload จัดทำโดย Apache
หมวดหมู่หลัก:
FileItemFactory FileItem Factory
คลาส ServletFileUpload Core Core สำหรับการอัปโหลดไฟล์ใน servlet
FileItem สรุปข้อมูลของรายการไฟล์ฟอร์มที่อัปโหลด ในระยะสั้นการอัปโหลดไฟล์เป็นปัญหาในการประมวลผลมากขึ้น
การอัปโหลดไฟล์ struts ' <br /> file upload interceptor ช่วยให้เราฟังก์ชั่นการอัปโหลดไฟล์ล่าช้า
<interceptor name = "fileupload"/>>>
upload.xml
<struts> <package name = "upload_" extre = "struts-default"> <!-หมายเหตุ: คำหลัก "fileupload" ไม่สามารถใช้กับคำหลัก "fileupload"-> <action name = "fileuploadaction"> <!-จำกัด ประเภทของไฟล์ที่อัปโหลด-> name = "fileupload.allowedextensions"> txt, jpg, jar </param> <!-จำกัด ประเภทของไฟล์ที่ทำงาน [ใช้ในเวลาเดียวกันกับด้านบนรับการแยก] <param name = "fileupload.allowedTypes"> ข้อความ </param>-> name = "input">/e/error.jsp </result> </action> </package> </struts>
upload.jsp
<body> <form action = "$ {pageContext.request.contextpath}/fileuploadaction" method = "post" enctype = "multipart/form-data"> ชื่อผู้ใช้: <อินพุต type = "text" name = "username"> <br/> ไฟล์: </body>Error.jsp
<body> error.jsp <br/> <!-ดูข้อความแสดงข้อผิดพลาดทั้งหมดที่สร้างขึ้นโดยเฟรมเวิร์ก struts ในระหว่างการรันไทม์-> < %@ taglib uri = "/struts-tags" คำนำหน้า = "s" %> <s: fielderror> </s: fielderror> </body> ความสำเร็จ
รหัสหลัก
fileupload .class
FileUpload คลาสสาธารณะขยายการกระทำ UPPORT {// ฟอร์มที่เกี่ยวข้อง: <อินพุต Type = "file" name = "file1"> ไฟล์ส่วนตัวไฟล์ 1; // ชื่อไฟล์สตริงส่วนตัว file1filename; // ประเภทไฟล์ (MIME) สตริงส่วนตัว file1ContentType; โมฆะสาธารณะ setFile1 (ไฟล์ไฟล์ 1) {this.file1 = file1; } โมฆะสาธารณะ setFile1FileName (สตริง file1fileName) {this.file1FileName = file1filename; } โมฆะสาธารณะ setFile1ContentType (String file1ContentType) {this.file1ContentType = file1ContentType; } @Override สตริงสาธารณะที่ดำเนินการ () พ่นข้อยกเว้น {/********* รับไฟล์ที่อัปโหลดและประมวลผลมัน ******* // // อัปโหลดไฟล์ไปยังไดเรกทอรีอัปโหลด // รับเส้นทางสตริงพา ธ ของไดเรกทอรีที่อัปโหลด =; // สร้างไฟล์ไฟล์เป้าหมายไฟล์ destFile = ไฟล์ใหม่ (path, file1filename); // คัดลอกไฟล์ที่อัปโหลดไปยังเป้าหมาย FileTils.CopyFile (file1, destFile); กลับมาประสบความสำเร็จ - รายละเอียดการประมวลผลอัปโหลดไฟล์
. ขีด จำกัด ขนาดไฟล์
การอัปโหลดไฟล์สูงสุดที่สนับสนุนโดย structs คือ 2m โดยค่าเริ่มต้นและมีการแก้ไขโดยค่าคงที่:
<!-4. แก้ไขขนาดสูงสุดของไฟล์ที่อัปโหลดเป็น 30m->
<constant name = "struts.multipart.maxsize" value = "31457280"/>
ข. จำกัด ประเภทของไฟล์ที่อัปโหลดที่อนุญาต: อนุญาตให้ใช้งานเฉพาะไฟล์ที่มีคำต่อท้าย TXT/JPG: พารามิเตอร์ฉีดเพื่อ จำกัด ประเภทการอัปโหลดไฟล์
<!-จำกัด ประเภทของไฟล์ที่อัปโหลด-> <interceptor-ref name = "defaultStack"> <!-จำกัด ส่วนขยายของไฟล์ที่ทำงาน-> <param name = "fileupload.allowedextensions"> txt, jpg, jar </param> <! name = "fileUpload.allowedTypes"> ข้อความ/ธรรมดา </param>-> </interceptor-ref>
2. ดาวน์โหลดไฟล์
ดาวน์โหลดไฟล์ struts, 2 วิธี:
วิธีที่ 1: เขียนข้อมูลสตรีมไบต์ไปยังเบราว์เซอร์ผ่านวัตถุตอบสนอง ตั้งค่าวิธีการตอบกลับสำหรับการดาวน์โหลด 2: Struts Methods
ดาวน์โหลดไฟล์ Struts:
คัดลอกรหัสดังนี้: <ชื่อประเภทผลลัพธ์ = "สตรีม"/>>>
ก่อนอื่นโปรดทราบว่าคุณสร้างโฟลเดอร์อัปโหลดใหม่ในไดเรกทอรี WebRoot และใส่ไฟล์ที่คุณต้องการให้ไว้ในโฟลเดอร์ที่ดาวน์โหลด
upload.xml
<action name = "down_*" method = "{1}"> <!-แสดงรายการ-> <name result = "list">/e/list.jsp </result> <!-การดำเนินการดาวน์โหลด-> <name result = "download" type = "stream"> <! ส่งคืนคุณสมบัติของสตรีม [จริง ๆ แล้ว getatrinputStream ()]-> <param name = "inputName"> attrinputStream </param> <!-ส่วนหัวดาวน์โหลดรวมถึง: ชื่อไฟล์ที่แสดงโดยเบราว์เซอร์-> <param name = "contentDisposition"> name = "buffersize"> 1024 </param> </result> </action>list.jsp
<body> <table align = "center"> <tr> <td> number </td> <td> ชื่อไฟล์ </td> <td> การดำเนินการ </td> </td> < %@tglib uri = "http://java.sun.com/jsp/jstl/core items = "$ {filenames}" varstatus = "vs"> <tr> <td> $ {vs.count} </td> <td> $ {filename} </td> <td> <! value = "$ {filename}"> </c: param> </c: url> <a href = "$ {url}"> ดาวน์โหลด </a> </td> </tr> </c: foreach> </table> </body>การลดลง
/***ดาวน์โหลดไฟล์*1. แสดงรายการไฟล์ทั้งหมดที่จะดาวน์โหลด*2. ดาวน์โหลดไฟล์** /การดาวน์โหลดคลาสสาธารณะขยาย ActionSupport { /******************* 1 แสดงรายการของไฟล์ทั้งหมดที่จะดาวน์โหลด ********************************/รายการสตริงสาธารณะ () พ่นข้อยกเว้น {// รับสายการอัปโหลดพา ธ เส้นทางสตริง = servletactionContext.getServletContext (). getRealPath ("/อัปโหลด"); // ไฟล์วัตถุไดเรกทอรีไฟล์ = ไฟล์ใหม่ (พา ธ ); // รับชื่อไฟล์ของไฟล์ทั้งหมดที่จะดาวน์โหลดสตริง [] filenames = file.list (); // บันทึก ActionContext AC = ActionContext.getContext (); // รับแผนที่แทนการร้องขอ (วิธีที่สอง) แผนที่ <สตริง, object> request = (แผนที่ <string, object>) ac.get ("คำขอ"); request.put ("ชื่อไฟล์", ชื่อไฟล์); กลับ "รายการ"; } /****************** 2 ดาวน์โหลดไฟล์ ************************************************************************** โมฆะสาธารณะ setFilename (ชื่อไฟล์สตริง) {// จัดการปัญหาในพารามิเตอร์ที่ผ่าน (รับการส่ง) ลอง {filename = สตริงใหม่ (filename.getBytes ("ISO8859-1"), "UTF-8"); } catch (unsupportencodingexception e) {โยน runtimeException ใหม่ (e); } // กำหนด this.filename = ชื่อไฟล์; } // 2 ดาวน์โหลดวิธีการธุรกิจที่ส่ง (กำหนดค่าสตรีมใน struts.xml) สตริงสาธารณะลง () โยนข้อยกเว้น {return "ดาวน์โหลด"; } // 3. วิธีการส่งคืนไฟล์สตรีมไฟล์ public inputStream getAttRinputStream () {return servletActionContext.getServletContext (). getResourceasstream ("/อัปโหลด/" + ชื่อไฟล์); } // 4. ดาวน์โหลดชื่อไฟล์ที่แสดง (ชื่อไฟล์ที่แสดงโดยเบราว์เซอร์) สตริงสาธารณะ getDownFileName () {// การเข้ารหัสภาษาจีนจำเป็นต้องลอง {filename = urlencoder.encode (ชื่อไฟล์ "UTF-8"); } catch (unsupportencodingexception e) {โยน runtimeException ใหม่ (e); } ส่งคืนชื่อไฟล์; -ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน