การอัปโหลดไฟล์เป็นหนึ่งในสถานการณ์ทั่วไปบนอินเทอร์เน็ต สถานการณ์ทั่วไปที่สุดคือการอัปโหลดอวตาร ฯลฯ วันนี้ฉันจะพาคุณไปทำเคสเล็ก ๆ ของการอัปโหลดไฟล์ใน Spring Boot
1. การกำหนดค่าแพ็คเกจ POM
เราใช้เวอร์ชันล่าสุดของ Spring Boot 1.5.9, JDK ใช้ 1.8, tomcat8.0
<carent> <scarreid> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Parent </artifactid> <Sersion> 1.5.9.Release </เวอร์ชัน> </ParentIs> <propiTies> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupId> org.springframework.boot </groupid> <RoupID> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Devtools </artifactid> <pontrail> true </onftional> </predency>
Spring-Boot-Starter-Thymeleaf ถูกนำมาใช้เป็นเอ็นจิ้นเทมเพลตหน้าและเขียนตัวอย่างการอัปโหลดอย่างง่าย
2. การตั้งค่าคลาสเริ่มต้น
@springbootapplicationPublic คลาส FilePloadWebapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {springapplication.run (fileuploadwebapplication.class, args); } // tomcat การเชื่อมต่อไฟล์อัพโหลดขนาดใหญ่รีเซ็ต @bean สาธารณะ tomcatembeddedservletContainerFactory tomcatembedded () {tomcatembeddedservletContainerFactory tomcat = tomcatembeddedservletContainerFactory (); tomcat.addconnectorcustomizers ((tomcatconnectorcustomizer) ตัวเชื่อมต่อ -> {if (connector.getProtocolHandler () อินสแตนซ์ของ abstracthtp11protocol <?>)) {// -1 หมายถึงไม่ จำกัด connector.getProtocolHandler ()). setMaxSwallowsize (-1);}}); กลับ Tomcat; -รหัส Tomcatembedded คือการแก้ปัญหาการรีเซ็ตการเชื่อมต่อเมื่ออัปโหลดไฟล์ที่มีขนาดใหญ่กว่า 10 เมตร เนื้อหาข้อยกเว้นนี้ยังไม่ได้ถูกบันทึกโดย Globalexception
การอ้างอิงเนื้อหาโดยละเอียด: การรีเซ็ตการเชื่อมต่อการอัปโหลดไฟล์ขนาดใหญ่ของ Tomcat
3. เขียนหน้าส่วนหน้า
หน้าอัปโหลด
<! doctype html> <html xmlns: th = "http://www.thymeleaf.org"> <body> <h1> file boot spring upload ตัวอย่าง </h1> <method = "post" action = "upload" enctype = "multipart/form-data type = "subment" value = "ส่ง"/> </form> </body> </html>
คำขอโพสต์ที่ง่ายมากกล่องการเลือกเพื่อเลือกไฟล์และปุ่มส่งเอฟเฟกต์มีดังนี้:
อัปโหลดหน้าจอแสดงผล:
<! doctype html> <html lang = "en" xmlns: th = "http://www.thymeleaf.org"> <body> <h1> การบูตสปริง - อัปโหลดสถานะ </h1> <div th: if = "$ {message}การเรนเดอร์มีดังนี้:
4. คลาสการควบคุมอัปโหลดคลาสควบคุม
เยี่ยมชม LocalHost เพื่อข้ามไปยังหน้าอัปโหลดโดยอัตโนมัติ:
@getMapping ("/") ดัชนีสตริงสาธารณะ () {return "upload";}อัปโหลดการประมวลผลบริการ
@PostMapping ("/อัปโหลด") สตริงสาธารณะ SingleFileUpload (@RequestParam ("ไฟล์") ไฟล์ multipartFile, RedirectAtTributes redirectatTributes) {ถ้า (file.isempty ()) {redirectattributes.addflashattribute ("ข้อความ" return "Redirect: UploadStatus"; } ลอง {// รับไฟล์และบันทึกไว้ที่ไหนสักแห่งไบต์ [] bytes = file.getBytes (); เส้นทางพา ธ = paths.get (uploaded_folder + file.getoriginalfilename ()); files.write (เส้นทาง, ไบต์); Redirectattributes.addflashattribute ("ข้อความ", "คุณอัปโหลดสำเร็จแล้ว '" + file.getoriginalfilename () + "'"); } catch (ioexception e) {e.printstacktrace (); } return "redirect:/uploadstatus";}รหัสข้างต้นหมายความว่าข้อมูลไฟล์จะถูกอ่านผ่าน MultipartFile หากไฟล์ว่างเปล่าให้ข้ามไปที่หน้าผลลัพธ์และให้พรอมต์ หากสตรีมไฟล์ไม่ว่างเปล่าและเขียนลงในไดเรกทอรีที่ระบุผลลัพธ์จะปรากฏบนหน้า
MultipartFile เป็นคลาส encapsulation สำหรับไฟล์สปริงที่อัปโหลดซึ่งมีข้อมูลเช่นสตรีมไบนารีและแอตทริบิวต์ไฟล์ แอตทริบิวต์ที่เกี่ยวข้องยังสามารถกำหนดค่าในไฟล์การกำหนดค่า ข้อมูลการกำหนดค่าพื้นฐานมีดังนี้:
Spring.http.multipart.enabled = true #default ไฟล์ที่รองรับการอัปโหลด. spring.http.multipart.file-size-threshold = 0 #support ไฟล์การเขียนไปยัง disk.spring.http.multipart.location = # ไดเรกทอรีชั่วคราวสำหรับการอัปโหลดไฟล์สปริง Spring.http.multipart.max-request-size = 10mb # ขนาดคำขอสูงสุดที่รองรับ
สิ่งที่ใช้กันมากที่สุดคือเนื้อหาการกำหนดค่าสองครั้งสุดท้ายซึ่ง จำกัด ขนาดการอัปโหลดไฟล์ หากไฟล์มีขนาดเกินขนาดจะมีข้อยกเว้นเมื่ออัปโหลด:
สำหรับข้อมูลการกำหนดค่าเพิ่มเติมโปรดดูที่นี่: คุณสมบัติแอปพลิเคชันทั่วไป
5. การจัดการข้อยกเว้น
@ControllerAdvicePublic คลาส globalexceptionhandler {@exceptionhandler (multipartexception.class) Public String HandleRoror1 (Multipartexception E, Redirectattributes redirectattributes) {redirectattributes.addflashattribute ("ข้อความ" กลับ "เปลี่ยนเส้นทาง:/uploadstatus"; -ตั้งค่า @controlleradvice เพื่อตรวจสอบว่าขนาดไฟล์ที่อัปโหลดโดย Multipart นั้นมี จำกัด หรือไม่ เมื่อข้อยกเว้นนี้เกิดขึ้นพรอมต์จะได้รับในหน้าส่วนหน้า คุณสามารถทำสิ่งต่าง ๆ ได้มากมายด้วย @ControllerAdvice เช่นการจัดการข้อยกเว้นระดับโลก ฯลฯ นักเรียนที่สนใจสามารถเรียนรู้ได้
6. สรุป
ตัวอย่างง่ายๆของการอัปโหลดไฟล์โดยใช้สปริงบูตเสร็จสมบูรณ์ นักเรียนที่สนใจสามารถดาวน์โหลดรหัสตัวอย่างและลองใช้
อ้างถึง:
รหัสตัวอย่าง - GitHub
ตัวอย่างคลาวด์รหัสโค้ด
สรุป
ข้างต้นคือสิ่งที่ตัวแก้ไขแนะนำให้คุณใช้ฟังก์ชันอัปโหลดไฟล์ Spring Boot ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!