ก่อนอื่นพูดคุยเกี่ยวกับ หลักการของการอัปโหลดและดาวน์โหลดการใช้งานอินสแตนซ์ ของ Struts2:
Struts 2 ถูกอัปโหลดผ่านไฟล์ pommons fileupload
Commons FilePload ใช้ FileUpload Interceptor เพื่อผูกไฟล์ไปยังอินสแตนซ์ของการดำเนินการโดยบันทึกข้อมูลของ HTTP ไปยังโฟลเดอร์ชั่วคราวจากนั้น struts จะใช้ FileUpload interceptor ดังนั้นเราสามารถใช้งานไฟล์ที่อัปโหลดโดยเบราว์เซอร์ในลักษณะไฟล์ท้องถิ่น
การใช้งานเฉพาะ :
1. สร้างหน้า index.jsp
<body> <s: form action = "upload" method = "post" ธีม = "simple" enctype = "multipart/form-data"> <table align = "center"> <tr> <td> เลือกไฟล์อัปโหลด </td> <td id = "เพิ่มเติม" </td> </tr> <tr> <td> <s: submit type = "button" value = "ส่ง" onclick = "ส่งคืน checkf ()"/> </td> <td> <s: รีเซ็ตค่า = "รีเซ็ต"> </s: รีเซ็ต> </td> href = "<s: url value = 'download.action'> <s: param name = 'filename'> test.txt </s: param> </s: url>"> ดาวน์โหลด </a> </td> </tr>
สร้างหน้า result.jsp
<body> <s: form> <div style = "border: 1px solid black"> ไฟล์อัพโหลดสำเร็จ: <br> <ul style = "list-style-type: decimal"> <s: iterator value = "#request.filename" id = "ไฟล์" สถานะ "สถานะ"> <li>
แน่นอนอย่าลืมเพิ่มการอ้างอิงแท็ก struts2 ในแต่ละหน้า < %@taglib prefix = "s" uri = "/struts-tags" %>
2. สร้างไฟล์ updown.js และอ้างอิงใน index.jsp
ฟังก์ชั่น checkf () {var files = document.getElementsByName ("ไฟล์"); if (ไฟล์ [0] .value.length! = 0) {return true; } else {Alert ("โปรดเลือกไฟล์"); กลับเท็จ; }} ฟังก์ชั่น addmore () {var td = document.getElementById ("เพิ่มเติม"); var br = document.createElement ("br"); var input = document.createElement ("input"); ปุ่ม var = document.createElement ("อินพุต"); input.type = "ไฟล์"; input.name = "ไฟล์"; button.type = "ปุ่ม"; button.value = "ลบ"; button.onclick = function () {td.removechild (br); td.removechild (อินพุต); td.removechild (ปุ่ม); } td.AppendChild (br); TD.AppendChild (อินพุต); TD.AppendChild (ปุ่ม); - 3. สร้าง updownloadAction.java
แพ็คเกจ com.action; นำเข้า java.io.file; นำเข้า java.io.fileinputstream; นำเข้า java.io.filenotfoundexception; นำเข้า java.io.fileoutputstream; นำเข้า java.io.Inputstream; นำเข้า Java.io.oUTTREAM; javax.servlet.http.httpservletrequest; นำเข้า com.opensymphony.xwork2.actionsupport; นำเข้า org.apache.struts2.servletactionContext; การอัปเดตระดับสาธารณะ รายการส่วนตัว <file> ไฟล์; // สอดคล้องกับแท็กไฟล์ในรายการส่วนตัว jsp <string> fileFileName; // รายการส่วนตัว <String> fileContentType; // ชื่อไฟล์สตริงส่วนตัว; // ได้รับพารามิเตอร์ PRAM ใน JSP @SuppressWarnings ("DEPRECATION") // ServletActionContext.getServletContext (). getRealPath ("/อัปโหลด"); // อัปโหลด Path System.out.println (root); InputStream InputStream; ไฟล์ DestFile; Outputstream OS; สำหรับ (int i = 0; i <file.size (); i ++) {inputStream = new FileInputStream (file.get (i)); destFile = ไฟล์ใหม่ (root, this.getFileFileName (). get (i)); OS = ใหม่ fileOutputStream (destFile); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [400]; ความยาว int = 0; ในขณะที่ ((length = inputstream.read (บัฟเฟอร์))> 0) {os.write (บัฟเฟอร์, 0, ความยาว); } inputStream.close (); os.close (); } httpservletRequest request = servletActionContext.getRequest (); request.setAttribute ("ชื่อไฟล์", fileFileName); กลับมาประสบความสำเร็จ } // ไฟล์ดาวน์โหลด public inputstream getDownloadfile () พ่น filenotfoundexception, unsupportencodexception {system.out.println (getFilename ()); // หากชื่อไฟล์ดาวน์โหลดเป็นภาษาจีนให้ทำการเข้ารหัสอักขระการแปลง servletactionContext.getResponse (). setheader ("เนื้อหา-การจัดสรร", "สิ่งที่แนบมา; filename =" + java.net.urlencoder.encode (filename, "UTF-8")); inputStream inputStream = new fileInputStream ("f:/" // ใช้เส้นทางสัมบูรณ์เพื่อดาวน์โหลดไฟล์ "test.txt" จากเส้นทางนี้ + this.getFilename ()); System.out.println (InputStream); ส่งคืนอินพุตสตรีม; } // ดาวน์โหลด public String downloadfile () โยนข้อยกเว้น {return success; } Public String getFilename () พ่น unsupportencodexception {return filename; } โมฆะสาธารณะ setFileName (ชื่อสตริงไฟล์) พ่น unsupportencodingException {this.filename = สตริงใหม่ (filename.getBytes ("iso8859-1"), "utf-8"); -หมายเหตุ: วิธีการรับและตั้งค่าของแอตทริบิวต์ได้ถูกละเว้น
ประการที่สี่ในที่สุดไฟล์การกำหนดค่า
1. การกำหนดค่า web.xml
<Tilter> <Tilter-Name> struts2 </tilter-name> <silter-class> org.apache.struts2.dispatcher.filterDispatcher </filter-class> </filter> <filter-mapping>
2. struts.xml การกำหนดค่า
<struts> <constant name = "struts.i18n.encoding" value = "utf-8"> </ค่าคงที่> <constant name = "struts.multipart.savedir" value = "f:/"> </stant> name = "success">/jsp/result.jsp </result> <interceptor-ref name = "fileupload"> <!-maximumsize (ไม่บังคับ)-ความยาวสูงสุดของไฟล์ที่อัปโหลดไปยังการกระทำที่อนุญาตโดย interceptor นี้ (ในหน่วย BYTE) โปรดทราบว่าพารามิเตอร์นี้ไม่มีส่วนเกี่ยวข้องกับคุณสมบัติที่กำหนดไว้ใน webwork.properties ค่าเริ่มต้นคือ 2MB-> <param name = "maximumsize"> 409600 </param> <!-อนุญาตให้ใช้ (ทางเลือก)-รายการประเภท contentType ที่คั่นด้วยเครื่องหมายจุลภาค (เช่นข้อความ/HTML) รายการเหล่านี้เป็น contentTypes ที่ได้รับอนุญาตจากการสกัดกั้นนี้เพื่อส่งผ่านไปยังการกระทำ หากไม่ได้ระบุประเภทการอัปโหลดใด ๆ จะได้รับอนุญาต-> <param name = "อนุญาตให้ใช้"> ข้อความ/ธรรมดา </param> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action> <action name = "ดาวน์โหลด" -> <param name = "contentType"> แอปพลิเคชัน/txt; </param> <!-ระบุชื่อไฟล์ที่ดาวน์โหลดและวิธีการแสดงผล แต่ให้ความสนใจกับรหัสชื่อภาษาจีนที่อ่านไม่ออก วิธีแก้ปัญหาคือ: การเข้ารหัสการประมวลผล-> <!-ContentDisposition เป็นวิธีการประมวลผลของการดาวน์โหลดไฟล์รวมถึงอินไลน์และไฟล์แนบ ค่าเริ่มต้นคืออินไลน์ เมื่อใช้ไฟล์แนบจะถูกกำหนดค่าดังนี้: ไฟล์แนบ; ชื่อไฟล์ = "ชื่อไฟล์" -> <param name = "contentDisposition"> ไฟล์แนบ; filename = "$ {filename}" </param> <!-รับอินพุตจากวิธี getDownloadFile ()-> <param name = "inputName"> ดาวน์โหลด </param> <!-ระบุขนาดแคชของไฟล์ที่ดาวน์โหลด-> < </pack> </struts>การอัปโหลดแบบมัลติไฟล์หลายไฟล์ และ การดาวน์โหลดไฟล์เดี่ยว จะถูกนำไปใช้
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน