1. وصف موجز
تنقسم البيانات بتنسيق متعدد الأجزاء إلى أجزاء متعددة ، كل جزء يتوافق مع حقل الإدخال. في حقل إدخال النموذج العام ، سيتم وضع بيانات نوع النص في الجزء المقابل ، ولكن إذا تم تحميل ملف ، يمكن أن يكون الجزء المقابل ثنائيًا. على غرار هذا:
2. تكوين المحلل المتعدد
على الرغم من أن الطلبات المتعددة قد تبدو معقدة ، إلا أنه من السهل التعامل معها في الربيع MVC. قبل كتابة طريقة وحدة تحكم لمعالجة تحميل الملفات ، يجب علينا تكوين محلل متعدد الأوقات لإخبار Sipatcherservlet كيفية قراءة طلب Multipart.
يحتوي Spring على اثنين من التطبيقات المدمجة لـ Multipartresolver:
تكوين المعايير servletmultipartresolver:
1. بيان الفول:
التكوين في ApplicationContext.xml
نسخة الكود هي كما يلي: <bean id = "multipartresolver" الفرشاة: java ؛ "> @bean (name =" multipartresolver ") public serventsermultmultipartrosolver getStAndardServletMultiPartresolver ()
النصائح: يجب أن يكون اسم المحلل المتعدد multipart multipartresolver ، وإلا سيتم الإبلاغ عن خطأ.
2. تكوين معلمات التحميل:
* web.xml التكوين
<Srevlet> <Srevlet-Name> dispatcherservlet </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Ing-param> <param-name> contextConfigLocation </param-name> <param-value> <load-on-startup> 1 </load-on-startup> <Prongart-Config> <!-تحميل إلى/tmp/upload directory-> <location>/tmp/upload </location> <!-حجم الملف 2m-> <max-file-size> 2097152 </max-file-size> <max-request-size> 4194304 </max-request-size> <!-يجب كتابة جميع الملفات إلى القرص-> <ملف الحجم </servlet mapping>
* التكوين في فئة التكوين
موروثة في فئة التكوين من الملخصات contationconfigdispatherservletinitializer
OverRide تخصيص الفراغ المحمي (servletregistration.dynamic التسجيل) {// التحميل إلى /tmp /upload directory ، حجم الملف هو 2 متر ، ولا يتجاوز الطلب بأكمله 4 أمتار ، ويجب كتابة جميع الملفات لتسجيل القرص. MultipartConfigElement ("E: // upload_ftp" ، 2097152،4194304،0)) ؛ }تكوين commonsmultipartresolver:
1. إعلان الفاصوليا وتكوين معلمات التحميل
<bean id = "multipartresolver"> <!-قم بتعيين دليل التحميل/TMP/تحميل ؛ يتم تعيين سعة الملف القصوى على 2M ؛ يتم تعيين الحد الأقصى لحجم الذاكرة على 0 ، مما يعني أنه سيتم كتابة جميع الملفات على القرص ؛ لا يمكن تعيين سعة الحد الأقصى الكلي لطلب multipart-> <property name = "uploadtempdir" value = "/tmp/expload"/> <property name = "maxuploadsize" value = "2097152"/> <property name = "maxinmorysize" value = "0"/> </bean>
الفرق:
1. commonsmultipartresolver مقارنة مع المعايير servletmultipartresolver ، من المستحيل تعيين السعة القصوى الإجمالية لطلبات متعددة.
2. لا يجبر CommonSmultiPartresolver على تحديد مسار ملف مؤقت. بشكل افتراضي ، هذا المسار هو الدليل المؤقت لحاوية servlet. يجب أن يقوم المعايير servletmultipartresolver بتعيين مسار الملف المؤقت لتنفيذها بشكل طبيعي. (الدلائل التي تم تحميلها المذكورة أعلاه كلها مسارات ملفات مؤقتة)
3. SPRINGMVC يتولى الطلبات
1. شكل الواجهة الأمامية
<form action = "/picture" method = "post" enctype = "multipart/form-data"> <input type = "file" name = "piction"
TIPS: enctype = "multipart/form-data" يجب ضبطها على إخبار springMVC بأن هذا طلب متعدد.
2. الواجهة الخلفية يقبل الطلبات
requestmapping (value = "/picture" ، method = requestMethod.post) السلسلة العامة gethome (requestpart ("picture") صورة multipartfile) يلقي ioException {String name = picture.getName () ؛ byte [] bytes = picture.getBytes () ؛ picture.transferto (ملف جديد ("/"+picture.getoriginalfilename ())) ؛ // عند حفظ نظام الملفات هنا ، استخدم مسارًا نسبيًا ، على سبيل المثال ، التكوين هنا هو /. بناءً على دليل التحميل الذي تم تكوينه. وهذا هو ، مسار الملف e:/ upload_ftp/ هو إرجاع الدليل المحفوظ "الصفحة الرئيسية" ؛ }نصائح: 1. @requestpart ("الصورة"): عند تقديم نموذج التسجيل ، ستعطي سمة p Essence مجموعة من البايتات ، والتي تحتوي على بيانات الجزء المقابلة في الطلب (المحدد من خلال requestpart). إذا قام المستخدم بتقديم النموذج دون تحديد ملف ، فسيكون الصفيف فارغًا (بدلاً من الفارغ). لذلك يمكننا حتى استخدام مجموعة البايت [] لتلقي طلبات متعددة بدلاً من multipartfile.
2. MultipartFile: باستخدام طريقة MultipartFile لتلقي يوفر لنا العديد من الطرق لتنفيذ العمل التالي ...
3. قبول الملفات التي تم تحميلها في شكل جزء
بالنسبة للموضوع ، لا يوجد فرق كبير بين واجهة الجزء و multipartfile. في كثير من الحالات ، يكون اسم طريقة الجزء هو نفس اسم طريقة multipartfile. هناك بعض أوجه التشابه ، ولكنها مختلفة قليلاً ، مثل getSubmittedFilename () المقابلة لـ getoriginalfilename (). وبالمثل ، فإن الكتابة () تتوافق مع TransferTo () ، وبمساعدة هذه الطريقة ، يمكننا كتابة الملف الذي تم تحميله إلى نظام الملفات.
تجدر الإشارة إلى أنه إذا قبلت تحميل الملفات من خلال معلمات الجزء عند كتابة أساليب وحدة التحكم ، فلن تكون هناك حاجة لإعداد multipartresolver. فقط عند استخدام MultipartFile ، نحتاج Multipartresolver.
requestmapping (value = "/picture" ، method = requestMethod.post) السلسلة العامة gethome (requestpart ("picture") صورة الجزء) رمي ioException {picture.write (/"/" picture.getSubmittedFilename ()) ؛ العودة "الصفحة الرئيسية" ؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.