อย่างแรกคือส่วนหน้าเว็บ upload_file.jsp
<%@ page language = "java" image = "java.util.*" pageencoding = "utf-8"%> <! > <form action = "uploadfile" method = "post" enctype = "multipart /form-data"> <!-ไฟล์ domain-> <อินพุต type = "file" name = "Source" /< /> input type = " ส่ง "value =" อัปโหลด "> </form> </body> </html>
สำหรับรูปแบบของการอัพโหลดไฟล์จะต้องตั้งค่าเมทาโกเป็นโพสต์และ Enctype จะต้องตั้งค่าเป็น multipart/form-data
จากรหัสข้างต้นคุณจะเห็นว่าแบบฟอร์มนี้ถูกส่งไปยัง UploadFile การกระทำนี้เพื่อดำเนินการ
<action name = "uploadfile"> <name result = "success">/uploadResult.jsp </result> <!-fileuploading ซึ่งสามารถใช้เพื่อ จำกัด ประเภทและขนาดเอกสารของเอกสารอัปโหลด-> <internetor- ref name = "fileUpload"> <!-จำกัด ขนาดของไฟล์ 20m หน่วยคือ byte-> <sem name = "maximumsize"> 20971520 </param> </interceptor-ref> <! . หลังจาก fileupload interceptor-> <interceptor-ref name = "defaultStack" /> < /action>
FileUpload Interceptor ใช้เพื่อตั้งค่าเส้นทางการอัปโหลดเพื่อ จำกัด ประเภทและขนาดไฟล์
เกี่ยวกับขนาดของไฟล์มันเป็นไปไม่ได้ที่จะมี <param name = "maximumsize" >> คุณต้องเพิ่มภายใต้แท็ก <struts>
<constant name = "struts.multipart.maxsize" value = "21000000"/>/>/>
บรรทัดของรหัสนี้ระบุขนาดสูงสุดของขนาดไฟล์ที่อนุญาตให้อัปโหลดไฟล์ในโครงการทั้งหมดกล่าวคือขนาดไฟล์เดียวที่อัปโหลดในโครงการนี้ไม่เกิน 21000000 ไบต์ (ประมาณ 20 เมตร) ไฟล์ที่ได้รับอนุญาตให้อัปโหลดโดยค่าเริ่มต้นคือ 2M ดังนั้นนี่จึงเป็นวิธีที่แบ่งข้อ จำกัด ของไฟล์ 2M ที่สามารถอัปโหลดไฟล์ 2M ได้เท่านั้น
เกี่ยวกับประเภทของไฟล์หากคุณต้องการ จำกัด เป็นไฟล์รูปภาพคุณสามารถกำหนดค่าได้เช่นนี้
<!-ตั้งค่าเฉพาะการอัปโหลดของไฟล์รูปภาพ-> <intercepter-ref name = "fileupload"> <posm name = "readyTypes"> image/bmp, image/x-png, image/gif, image/jpeg < /</param> < /intercepter-ref> <interceptor-ref name = "defaultStack" /> />
ค่าในฉลากคือค่าของไฟล์เป็นประเภท MIME และประเภท MIME ของไฟล์ทั่วไปสามารถพบได้ใน%tomcat_home%/conf/web.xml
หากคุณต้องการ จำกัด ไฟล์ Word คุณสามารถ <terecedor> กำหนดค่าได้เช่นนี้
<!-Settling อนุญาตให้อัปโหลด Word Document-> <intercepter-ref name = "fileupload"> <sem name = "อนุญาตให้ใช้"> แอปพลิเคชัน/msword, application/vnd.openxmlformats -offic edocument.wordprocessingml.document </param> < /intercepter-ref> <interceptor-ref name = "defaultStack" />>>
อย่างไรก็ตามฉันรู้สึกเช่นนี้เพื่อ จำกัด ประเภทไฟล์จะเป็นการดีกว่าที่จะใช้ JavaScript เพื่อใช้ข้อ จำกัด ที่ส่วนหน้า
ถัดไปการอัพโหลดการเขียนแอตทริบิวต์ส่วนตัวที่จำเป็นที่จำเป็นสำหรับการอัปโหลดเป็นแหล่งซึ่งสอดคล้องกับแอตทริบิวต์ชื่อของโดเมนไฟล์ใน upload_file.js p นั่นคือค่าคุณสมบัติชื่อของโดเมนไฟล์เป็นแหล่งที่มา นอกจากนี้ยังมีคุณลักษณะส่วนตัวที่สำคัญกว่าสองประการ:
SourceFilename ส่วนตัว
สตริงส่วนตัว SourcecontentType;
โดยสรุปนั่นคือตัวอย่างเช่นชื่อ = "abc" ของโดเมนฟิลด์จีนใน upload_file.jsp ดังนั้นสิ่งนี้จะต้องกำหนดในการกระทำ
ไฟล์ส่วนตัว ABC;
ABC จะได้รับออบเจ็กต์ไฟล์โดยอัตโนมัติที่จะอัปโหลด ABCFiLENAME จะได้รับชื่อไฟล์โดยอัตโนมัติและ ABCCONTETTYPE จะได้รับประเภทไฟล์โดยอัตโนมัติ
ฉันต้องมุ่งเน้นไปที่การอัปโหลดเส้นทาง
หากอัปโหลดไปยังเส้นทางสัมบูรณ์มันค่อนข้างดี แต่ถ้าคุณต้องการอัปโหลดไปยังโฟลเดอร์อัปโหลดในไดเรกทอรีรูทโครงการวิธีรับเส้นทางที่สมบูรณ์ของโฟลเดอร์อัปโหลดนี้
ฉันพยายามใช้
ServletActionContext.getServletContext ()
แต่ส่งคืนโมฆะ ยังใช้
ServletActionContext.getRequest ()
ยังคงกลับไปที่ Null แต่การตรวจสอบปัญหานี้ออนไลน์หลายคนแนะนำการเขียนนี้พิสูจน์ว่าอาจเป็นไปได้ในบางกรณี แต่มีคนที่กลับมาเป็นโมฆะอย่างฉัน ServiceContextare อินเตอร์เฟส วิธีเฉพาะมีดังนี้:
การอัพโหลดระดับสาธารณะขยายการกระทำ imvletContextare { / ** * การละเว้นรหัสอื่น ๆ ... * / บริบท prive ServletContext; เป็นโมฆะ setServletContext (บริบท servletContext) {this.context = บริบท;}}
จากนั้นใช้
String Path = context.getRealPath ("/upload");
รับเส้นทางของโฟลเดอร์อัปโหลด จากนั้นดำเนินการอัปโหลด:
/*อัปโหลดไฟล์ไปยังโฟลเดอร์อัปโหลด*/ไฟล์ saveful = ไฟล์ใหม่ (PATH, SourceFilename);
โดยส่วนตัวแล้วฉันขอแนะนำวิธีนี้เพราะวิธีนี้ดูเหมือนจะหลีกเลี่ยงเส้นทางที่ถูกต้องเมื่อโครงการถูกบรรจุและถ่ายโอนไปยังสภาพแวดล้อมอื่น ๆ
วางรหัสการอัปโหลดที่สมบูรณ์ในการอัปโหลด back.java
com.lidi.action; การอัพโหลดชั้นเรียนขยายการดำเนินการ imvletContextare { / ** * / ส่วนตัว Inl Long ServiceVersionuid = 1L; ประเภทของไฟล์ประเภทไฟล์ Private ServletContext; / ไฟล์สาธารณะ getSource () {return source;} โมฆะสาธารณะ setSource (แหล่งไฟล์) {this.source = แหล่งที่มา; String getSourceContentType () {return sourceContentType;} public voidth e (สตริง sourcecontentType) {this.sourcecontentType = sourcecontentType; *รับพา ธ ไปยังไฟล์อัปโหลด: Project Directory Folder*/String Path; โฟลเดอร์* / ไฟล์ savefile = ไฟล์ใหม่ (Path, SourceFilename);
อัปโหลดหน้าผลลัพธ์ updoadResult.jsp
<%@ page language = "java" image = "java.util.*" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! DocType html> <html> <head> <title> ผลการอัปโหลด </title> </head> <body> <p> ชื่อไฟล์: <s: sporement value = "SourceFilename"/> </p> <p> ไฟล์ ประเภท: <s: ค่าคุณสมบัติ = "sourcecontentType" /> </p> <p> ไฟล์: <a href = "อัปโหลด /<s: ค่าคุณสมบัติ =" SourceFilename " /"> <s: sperty = "sourcefi lename" /> </a> </p> </body> </html>
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้