بادئ ذي بدء ، نحن بحاجة إلى معرفة ماهية حذاء الربيع. اسمحوا لي أن أتحدث باختصار عن ذلك هنا. يمكن اعتبار Boot Spring بمثابة إطار عمل في إطار عمل ---> يدمج الأطر المختلفة ، مثل الأمان ، JPA ، البيانات ، السحابة ، وما إلى ذلك ، فهو لا يحتاج إلى الاهتمام بالتكوين ويمكن أن يبدأ التطوير بسرعة. إذا كنت مهتمًا ، فيمكنك فهم مبدأ تطبيق التكوين الآلي. في جوهرها ، هذا هو تطبيق التكوين المشروط لربيع 4.0. إذا تركت الرهانات بعمق ، فسترى ذلك.
مبدأ تحميل ملف SPRING BOOT هو في الواقع Spring MVC ، لأن هذا الجزء من العمل يتم بواسطة Spring MVC بدلاً من SPRING BOOT. لذا ، كيف يتعامل SpringMVC مع عملية تحميل الملف؟
صورة:
أولاً ، يبدأ المشروع التكوين ذي الصلة ، ثم يؤدي الخطوة الثانية أعلاه ، سيبحث Distatcherservlet عن الفاصوليا مع معرف multipartresolver. في التكوين ، تشير الفول إلى commonsmultipartresolve ، والتي تنفذ واجهة multipartresolver.
ستحدد الخطوة الرابعة هنا ما إذا كان ملف multipart هو طريقة iSmultipart. إرجاع صحيح: سيتم استدعاء طريقة multipartresolver. سيعود تمرير httpservletrequest كائن multiparthttpservletrequest ، ثم سيتم معالجة مراسلة الخدمات إلى طبقة وحدة التحكم. إرجاع خطأ: سيتم تجاهله والاستمرار في تمرير httpservletrequest.
في MVC ، تحتاج إلى تكوينه في ملف التكوين webapplicationContext.xml كما يلي:
<bean id = "multipartresolver"> <property name = "defaultencoding" value = "utf-8"/> <property name = "maxuploadsize" value = "100000000"/> <propert
تم تكوين Boot SPRING تلقائيًا ، فقط استخدمه مباشرة ، لا توجد مشكلة في إجراء اختبار. هناك حجم حد التحميل الافتراضي ، ولكن في التطوير الفعلي ، ما زلنا نقوم ببعض التكوينات.
على النحو التالي في application.properties:
#multipart config#refault file file upload spring.http.multipart.enabled = true#دليل تحميل الملف spring.http.multipart.location =/tmp/xunwu/images/#maximum size spring.http.multipart spring.http.multipart.max-request-size = 20mb
بالطبع ، يمكنك أيضًا كتابة فئات التكوين لتنفيذها ، ولن يتم عرض الفصول المحددة.
بعد قراءة ما سبق ، يجب أن يكون لديك فهم تقريبي. لنتحدث عن ذلك هنا. يوفر Spring Parser Multipart: multipartresolver. ما ورد أعلاه هو commonsmultipartresolver. يتم تنفيذه بناءً على تحميل ملفات الطرف الثالث من العموم. هذا أيضًا شيء قبل Servlet 3.0. بعد 3.0+ ، لا يمكنك أيضًا الاعتماد على مكتبات الطرف الثالث. يمكنك استخدام المعايير ServletMultiPartresolver ، والتي تنفذ أيضًا واجهة Multipartresolver. يمكننا إلقاء نظرة على تنفيذها:
* حقوق الطبع والنشر 2002-2017 المؤلف الأصلي أو المؤلفون. org.springframework.web.multipart.multipartException ؛ استيراد org.springframework.web.multipart.multiparthttpservletRequest Servlet 3.0 {link javax.servlet.http.part} API. * لإضافتها كحبة "متعددة الأدوات" إلى سياق SPATCHERSERSERSPLET ، * دون أي تكوين إضافي على مستوى الفول (انظر أدناه). * * <p> <b> ملاحظة: </b> من أجل استخدام تحليل multipart المستند إلى Servlet 3.0 ، * تحتاج إلى وضع علامة على servlet المتأثرة بـ "multipart-config" في * {code web.xml} ، أو باستخدام {link javax.servlet.multipartconfilement} {link javax.servlet.annotation.multipartConfig} annotation * على فئة servlet الخاصة بك. يجب تطبيق إعدادات التكوين مثل أقصى أحجام أو مواقع التخزين على مستوى تسجيل Servlet ؛ * Servlet 3.0 لا يسمح بتعيينهم على مستوى Multipartresolver. * * Author Juergen Hoeller * since 3.1 * see #setResolvelazily * seese httpservletrequest #getParts () * see org.springframework.web.multipart.commons.commonsmultipartresolver */public classerveldervipartertresolver sedolvelazily = false ؛ /** * قم بتعيين ما إذا كنت تريد حل طلب Lazy Multipart بتكاسل في وقت * الملف أو الوصول إلى المعلمة. * <p> الافتراضي هو "false" ، وحل عناصر متعددة على الفور ، ورمي * الاستثناءات المقابلة في وقت مكالمة {link #resolvemultipart}. * قم بتبديل هذا إلى "True" من أجل تحليل Lazy Multipart ، ورمي استثناءات Parse * بمجرد أن يحاول التطبيق الحصول على ملفات أو معلمات متعددة. */ public void setResolvelazily (Boolean Resolvelazily) {this.resolvelazily = resolvelazily ؛ } Override public boolean Ismultipart (httpservletrequest request) {// نفس التحقق كما في المشاع fileUpload ... if (! "post" .equals (request.getMethod (). } string contentType = request.getContentType () ؛ return (contentType! = null && contentType.ToLowerCase (). Startswith ("multipart/")) ؛ } Override public multiparthttpletRequest ResolveMultipart (طلب httpservletrequest) يلقي multipartexception {إرجاع standardmultiparthtttpletrequest (طلب ، this.resolvelazily) ؛ } Override public void cleanupmultipart (multiparthttpservletrequest request) {// لتكون على الجانب الآمن: حذف الأجزاء بشكل صريح ، // ولكن فقط أجزاء الملف الفعلية (part.getname) try {part (part: request.getParts ()) }}} catch (throwable ex) {logfactory.getLog (getClass ()). تحذير ("فشل في تنظيف العناصر المتعددة" ، ex) ؛ }}}فيما يلي فئة تكوين التنفيذ الأخيرة من الاختبار الذي كتبته من قبل. يمكنك إلقاء نظرة على ذلك لفترة وجيزة لفهم:
package 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 ؛ import org.springframework.context.annotation.configuration ؛ org.springframework.web.multipart.support.standardservletmultipartresolver fileUploAdConfig {private final multipartProperties multipartProperties ؛ pileuploadconfig العامة (multipartProperties multipartProperties) {this.multipartProperties = multipartProperties ؛ } / *** سجل محلل* regurn* / @bean (name = dispatcherservlet.multipart_resolver_bean_name) conditionalonmissingbean (multipartresolver.class) publicisterMultMultiPartresolver multipartrosolver () المعايير servletmultipartresolver () ؛ multipartresolver.setResolvelazily (multipartProperties.isresolvelazily ()) ؛ إرجاع multipartresolver. } / *** تحميل التكوين* return* / bean @conditionalonmissingbean public multipartConfigElement multipartConfIgElement () {return this.multipartProperties.createMultipartConfig () ؛ }}لخص
ما سبق هو مبدأ تحميل ملف التمهيد الربيعي الذي أدخله المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!