ก่อนอื่นเราจำเป็นต้องรู้ว่าสปริงบูตคืออะไร ให้ฉันพูดสั้น ๆ เกี่ยวกับที่นี่ สปริงบูตถือได้ว่าเป็นกรอบในกรอบ ---> รวมกรอบต่าง ๆ เช่นความปลอดภัย, JPA, ข้อมูล, คลาวด์ ฯลฯ ไม่จำเป็นต้องใส่ใจเกี่ยวกับการกำหนดค่าและสามารถเริ่มพัฒนาได้อย่างรวดเร็ว หากคุณสนใจคุณสามารถเข้าใจหลักการของการใช้งานการกำหนดค่าอัตโนมัติ ในสาระสำคัญมันคือการใช้การกำหนดค่าแบบมีเงื่อนไขของ Spring 4.0 หากคุณออกจากการเดิมพันลึกคุณจะเห็นมัน
หลักการของการอัปโหลดไฟล์ Spring Boot นั้นเป็นสปริง MVC จริง ๆ เพราะส่วนนี้ของงานนี้ทำโดย Spring MVC มากกว่าการบูตฤดูใบไม้ผลิ ดังนั้น SpringMVC จะจัดการกระบวนการอัปโหลดไฟล์ได้อย่างไร
รูปภาพ:
ขั้นแรกโครงการเริ่มต้นการกำหนดค่าที่เกี่ยวข้องจากนั้นดำเนินการขั้นตอนที่สองด้านบน Dispatcherservlet จะมองหาถั่วด้วย ID ของ MultipartResolver ในการกำหนดค่าถั่วชี้ไปที่ Commonsmultipartresolve ซึ่งใช้อินเตอร์เฟส multipartresolver
ขั้นตอนที่สี่ที่นี่จะพิจารณาว่าไฟล์ Multipart เป็นวิธี isMultipart หรือไม่ Return TRUE: วิธี MultiPartResolver จะถูกเรียก การผ่าน HTTPSERVLETREQUEST จะส่งคืนวัตถุ MultiparthttpServletRequest จากนั้น DispatchERServlet จะถูกประมวลผลไปยังเลเยอร์คอนโทรลเลอร์ Return False: มันจะถูกละเว้นและดำเนินการต่อเพื่อส่ง HttpservletRequest
ใน MVC คุณต้องกำหนดค่าในไฟล์กำหนดค่า webapplicationContext.xml ดังนี้:
<bean id = "multipartresolver"> <property name = "defaultEncoding" value = "UTF-8"/> <property name = "MaxUploadSize" value = "100000000"/> <property name = "uploadTempDir" value = "fileupload/temp"/>
Spring Boot ได้รับการกำหนดค่าโดยอัตโนมัติเพียงแค่ใช้โดยตรงไม่มีปัญหาในการทดสอบ มีขนาดขีด จำกัด การอัปโหลดเริ่มต้น แต่ในการพัฒนาจริงเรายังคงกำหนดค่าบางอย่าง
ดังนี้ในแอปพลิเคชัน properties:
#multipart config#ไฟล์สนับสนุนเริ่มต้นอัปโหลด Spring.http.multipart.enabled = true#ไฟล์อัพโหลดไดเรกทอรีสปริง. http.multipart.location =/tmp/xunwu/images/#ขนาดไฟล์ที่รองรับสูงสุด Spring.http.multipart.max-request-size = 20mb
แน่นอนคุณยังสามารถเขียนคลาสการกำหนดค่าเพื่อนำไปใช้และเรียนเฉพาะจะไม่ปรากฏขึ้น
หลังจากอ่านด้านบนคุณต้องมีความเข้าใจคร่าวๆ มาพูดถึงที่นี่ ฤดูใบไม้ผลิให้ตัวแยกวิเคราะห์ของ Multipart: Multipartresolver ข้างต้นคือ Commonsmultipartresolver มันถูกนำไปใช้ตามการอัปโหลดไฟล์ของบุคคลที่สามของคอมมอนส์ นี่เป็นบางสิ่งก่อน Servlet 3.0 หลังจาก 3.0+ คุณยังไม่สามารถพึ่งพาห้องสมุดบุคคลที่สามได้ คุณสามารถใช้ StandardservletMultipartResolver ซึ่งใช้อินเทอร์เฟซ MultipartResolver เราสามารถดูการใช้งานได้:
* ลิขสิทธิ์ 2545-2560 ผู้แต่งดั้งเดิมหรือผู้เขียนแพ็ค org.springframework.web.multipart.support; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.part org.apached. org.springframework.web.multipart.multipartexception; นำเข้า org.springframework.web.multipart.multiparthttpservletrequest นำเข้า org.springframework.web.multipart.multipartresolver; servlet 3.0 {@link javax.servlet.http.part} api * เพื่อเพิ่มเป็น "multipartresolver" ถั่วไปยังบริบทของ Spring Dispatcherservlet * โดยไม่ต้องมีการกำหนดค่าเพิ่มเติมในระดับถั่ว (ดูด้านล่าง) * * <p> <b> หมายเหตุ: </b> เพื่อใช้การแยกวิเคราะห์แบบหลายส่วนที่ใช้ servlet 3.0 * คุณต้องทำเครื่องหมายเซิร์ฟเวอร์ที่ได้รับผลกระทบด้วยส่วน "multipart-config" ใน * {@code web.xml} หรือกับ servlet {@link javax.servlet A {@link Javax.servlet.annotation.multipartConfig} คำอธิบายประกอบ * ในคลาส servlet ของคุณ การตั้งค่าการกำหนดค่าเช่นขนาดสูงสุดหรือสถานที่จัดเก็บ * จำเป็นต้องใช้ในระดับการลงทะเบียน servlet; * Servlet 3.0 ไม่อนุญาตให้ตั้งค่าไว้ที่ระดับ multipartresolver * * @author Juergen Hoeller * @Since 3.1 * @SEE #SetResOlvelazily * @See HTTPSERVLETREQUEST #getParts () * @See org.springframework.web.multipart.commons.commonsmonsmontipartresolver บูลีน redvelazily = false; /** * ตั้งค่าว่าจะแก้ไขคำขอ Multipart Request Lazy Lazy อย่างเกียจคร้าน ณ เวลาที่ * การเข้าถึงไฟล์หรือพารามิเตอร์ * <p> ค่าเริ่มต้นคือ "เท็จ" การแก้ไของค์ประกอบหลายส่วนทันทีโดยการขว้าง * ข้อยกเว้นที่สอดคล้องกันในเวลาของการโทร {@link #resolvemultipart} * สลับสิ่งนี้เป็น "จริง" สำหรับการแยกวิเคราะห์หลายครั้ง Lazy การขว้างปาแยกวิเคราะห์ * เมื่อแอปพลิเคชันพยายามที่จะได้รับไฟล์หรือพารามิเตอร์ multipart */ โมฆะสาธารณะ setResolvelazily (บูลีนแก้ปัญหาได้) {this.resolvelazily = resolvelazily; } @Override บูลีนสาธารณะ isMultipart (คำขอ httpservletRequest) {// ตรวจสอบเหมือนกับในไฟล์ Commons fileupload ... ถ้า (! } String ContentType = request.getContentType (); return (contentType! = null && contentType.toLowerCase (). startswith ("multipart/")); } @Override Public MultiparthttpservletRequest ResolveMultipart (คำขอ httpservletRequest) พ่น multipartexception {ส่งคืนมาตรฐานใหม่ MultiparthttpservletRequest (คำขอนี้ } @Override โมฆะสาธารณะ CleanupMultipart (คำขอ MultiparthttpservletRequest) {// จะอยู่ด้านที่ปลอดภัย: ลบชิ้นส่วนอย่างชัดเจน // แต่ชิ้นส่วนไฟล์จริง (สำหรับความเข้ากันได้ของเรซิ่น) ลอง {สำหรับส่วนหนึ่ง }}} catch (throwable ex) {logfactory.getLog (getClass ()). WARN ("ล้มเหลวในการทำความสะอาดรายการหลายรายการ", Ex); -นี่คือคลาสการกำหนดค่าการใช้งานหลังของการทดสอบที่ฉันเขียนไว้ก่อนหน้านี้ คุณสามารถดูได้สั้น ๆ เพื่อทำความเข้าใจ:
แพ็คเกจ com.bj.config; นำเข้า org.springframework.boot.autoconfigure.condition.conditionalonmissingbean; นำเข้า org.springframework.boot.autoconfigure.web.multipartproperties; org.springframework.boot.context.properties.enableConfigurationProperties; นำเข้า org.springframework.context.annotation.bean; นำเข้า org.springframework.context.annotation.configuration; org.springframework.web.multipart.support.standardservletMultipartresolver นำเข้า org.springframework.web.servlet.dispatcherservlet; นำเข้า javax.servlet.multipartconfigelement; fileUploadConfig {ส่วนตัว multipartProperties multipartProperties; Public FilePloadConfig (MultipartProperties MultipartProperties) {this.multipartProperties = multipartProperties; } / *** ลงทะเบียน parser* @return* / @bean (name = dispatcherservlet.multipart_resolver_bean_name) @conditionalonmissingbean (multipartresolver.class) public standardservlet StandardservletMultipartResolver (); Multipartresolver.setResolvelazily (multipartproperties.isresolvelazily ()); ส่งคืน multipartresolver; } / *** อัปโหลดการกำหนดค่า* @return* / @Bean @ConditionAlonMissingBean Public MultipartConfigelement MultipartConfigelement () {return this.multipartProperties.createMultipartConfig (); -สรุป
ด้านบนเป็นหลักการของการอัปโหลดไฟล์สปริงบูตที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!