การอัปโหลดไฟล์
multipart/form-data<input type=“file”><S: form action = "testupload" enctype = "multipart/form-data"> <s: textfield name = "username [0]" label = "user-1"> </s: textfield> <s: file name = "photos" label = "photos"> label = "photos"> </s: file> <s: textfield name = "ชื่อผู้ใช้ [2]" label = "user-3"> </s: textfield> <s: file name = "photos" label = "photo"> </s: file> <s: submit value = "ส่ง">
การอัปโหลดคลาสสาธารณะขยายการกระทำ { @setter @getter รายการส่วนตัว <file> รูปภาพ; @setter@getter รายการส่วนตัว <String> PhotosContentType; @setter@getter รายการส่วนตัว <String> photosfilename; @setter@getter รายการส่วนตัว <String> ชื่อผู้ใช้; Public String testupload () พ่น IOException {system.out.println ("ชื่อผู้ใช้:"+ชื่อผู้ใช้); System.out.println ("รูปภาพ:"+รูปภาพ); System.out.println ("photosfilename:"+photosfilename); System.out.println ("PhotosContentType:"+PhotosContentType); // ส่งไฟล์ไปยังไฟล์อัปโหลดในไดเรกทอรีรูทเซิร์ฟเวอร์ // รับ servletContext servletContext servletContext = servletActionContext.getServletContext (); // รับสตริงพา ธ จริง realPath = servletContext.getRealPath ("/อัปโหลด"); System.out.println (RealPath); ไฟล์ uploadfile = ไฟล์ใหม่ (realpath); // ตัดสินว่าเส้นทางนั้นมีอยู่หรือไม่ถ้า (! uploadfile.exists ()) {// สร้าง uploadfile.mkdir (); } สำหรับ (int i = 0; i <photos.size (); i ++) {uuid uuid = uuid.randomuuid (); fileutils.copyfile (photos.get (i), ไฟล์ใหม่ (realpath + "/" + uuid + photosfilename.get (i))); } คืนความสำเร็จ; -1. ควรจัดการกับปัญหาเล็ก ๆ น้อย ๆ กี่ข้อ?
1. ชื่อไฟล์มีชื่อซ้ำ โดยทั่วไป UUID สามารถสร้างได้ก่อนที่ชื่อไฟล์จะเป็นคำนำหน้า
2. จำกัด ขนาดของไฟล์เดียว
3. จำกัด ประเภทไฟล์
4. จำกัด ขนาดไฟล์ทั้งหมด
2. fileupload interceptor มีให้ใน struts2 เพื่อตั้งค่าแอตทริบิวต์เหล่านี้
fileupload interceptor มี 3 คุณสมบัติที่สามารถตั้งค่าได้
หมายเหตุ: มีขีด จำกัด เกี่ยวกับขนาดทั้งหมดของไฟล์ที่อัปโหลดในค่าเริ่มต้น properties ภายใต้ org.apache.struts2 คุณสามารถใช้ค่าคงที่เพื่อแก้ไข strut struts.multipart.maxsize = 2097152
<constant name = "struts.devmode" value = "true"/> <!-เปลี่ยนขนาดของไฟล์ทั้งหมดที่นี่-> <constant name = "struts.multipart.maxsize" value = "2097152"/> <package name = "เริ่มต้น" name = "defaultStack"> <!-เปลี่ยนขนาดของไฟล์เดียวส่วนประกอบไฟล์ Commons FileUpload ยอมรับไฟล์ที่อัปโหลดโดยค่าเริ่มต้นคือ 2m-> <param name = "fileupload.maximumsize"> 57,408 </param> <! การอัปโหลดไฟล์-> <param name = "fileupload.allowedextensions"> jpg, gif </param> </interceptor-ref> </interceptor-stack> </interceptors> name = "success">/web-inf/views/success.jsp </result> <result name = "input">/upload.jsp </result> </action> </package>
1. ข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการอัปโหลดไฟล์?
1. ข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องกับการอัปโหลดไฟล์ถูกกำหนดไว้ล่วงหน้าในไฟล์ struts-messages.properties
2. คุณสามารถอัปโหลดไฟล์ทรัพยากรที่สอดคล้องกับการดำเนินการในไฟล์หรือกำหนดข้อความแสดงข้อผิดพลาดใหม่ในไฟล์ทรัพยากรระหว่างประเทศ i18n_zh_cn.properties
struts.messages.error.file.too.large = ไฟล์ที่คุณผ่านมีขนาดใหญ่เกินไป struts.messages.error.content.type.not.lallowed = ประเภทไฟล์ผิดพลาด
ดาวน์โหลดไฟล์
ในบางแอปพลิเคชันอาจจำเป็นต้องส่งไฟล์ไปยังเบราว์เซอร์ของผู้ใช้แบบไดนามิกและชื่อและตำแหน่งที่เก็บข้อมูลของไฟล์นั้นไม่สามารถคาดเดาได้เมื่อเขียนโปรแกรม
รหัสตัวอย่าง
<a href = "testdownload"> ดาวน์โหลด </a>
การดาวน์โหลดคลาสสาธารณะจะขยาย ActionsUpport {// โดยปกติจะมีพารามิเตอร์ต่อไปนี้ในการกระทำ @setter @getter private String ContentType; @setter@getter private long contentlength; @setter@getter private string contentDisposition; @setter@getter private inputstream inputstream; Public String testdownload () พ่น filenotfoundexception, unsupportencodexception {// get servletContext servletContext servletContext = servletActionContext.getServletContext (); // รับพา ธ ของสตริงไฟล์ realPath = servletContext.getRealPath ("/web-inf/file/อย่างน้อยคุณ. mp3"); // รับสตรีมของไฟล์ inputStream = new FileInputStream (RealPath); // ตั้งค่าประเภทไฟล์ contentType = servletContext.getMimeType (RealPath); // รับความยาวของไฟล์ contentLength = ไฟล์ใหม่ (realpath) .length (); // ตั้งค่าชื่อสตริงชื่อไฟล์ filename = "อย่างน้อยคุณ. mp3"; filename = สตริงใหม่ (filename.getBytes ("GBK"), "ISO8859-1"); contentDisposition = "เอกสารแนบ; filename ="+ชื่อไฟล์; กลับมาประสบความสำเร็จ -<!-การดาวน์โหลดไฟล์-> <action name = "testDownload" method = "testDownload"> <result type = "Stream"> <!-ขนาดบัฟเฟอร์ไฟล์-> <param name = "buffersize"> 2048 </param> </results> </action>
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น