مقدمة
عند تطوير تطبيقات الويب ، يجب أن نوفر للمستخدمين وظائف التحميل ، مثل تحميل الصورة كإحصاء. من أجل تحميل الملفات ، يجب علينا تعيين طريقة النموذج للنشر و enctype إلى multipart/form-data . فقط في هذه الحالة ، سيقوم المتصفح بإرسال البيانات الثنائية للملف المحدد للمستخدم إلى الخادم. ستقدم هذه المقالة ملخصًا مفصلاً لوظيفة التحميل في إطار Struts2. لن أقول الكثير أدناه ، دعنا نلقي نظرة على المقدمة التفصيلية معًا.
تحميل ملف Struts2
لا توفر Struts2 محللها الخاص ، أي أن Struts2 لن يتعامل مع طلبات multipart/form-data بنفسها. يحتاج إلى استدعاء أطر التحميل الأخرى لتحليل بيانات الطلب الثنائي ، ولكن STRUTS2 يزيد من غلاف محلل التحميل الأصلي ، مما يؤدي إلى تبسيط تحميل الملفات.
في ملف تكوين default.properties من Struts2 ، يمكنك رؤية رمز التكوين مثل هذا:
### parser للتعامل مع طلبات نشر http ، مشفرة باستخدام mime-type multipart/form-data# struts.multipart.parser = cos# struts.multipart.parser = pell# struts.multipart.parser = jakarta-treamstruts.multipart.parser = jakarta defaultTruts.multipart.savedir = Struts.Multipart.MaxSize = 2097152
يتم استخدام الرمز أعلاه بشكل أساسي لتكوين محلل التحميل عند تحميل الملفات في Struts2. إن تغليف Struts2 يعزل الفرق بين مكونات تحميل الملف الأساسية. طالما يتم استخدام Resolver لتحميل ملف التكوين هذا ، يمكن للمطورين التبديل بسهولة بين أطر عمل تحميل الملفات المختلفة.
يستخدم Struts2 jakarta upload parser افتراضيًا ، بالطبع ، إذا كنت لا تحب ذلك ، فيمكنك أيضًا التبديل إلى شيء آخر. فيما يلي وظيفة تحميل ملف بسيطة تستند إلى Struts2 من خلال التعليمات البرمجية.
تنفيذ إجراء تحميل الملف
صفحة مكتب الاستقبال:
<form Action Action = "expload" method = "post" enctype = "multipart/form-data"> title: <input type = "text" name = "title"> <br> file: <input type = "file"
فئة العمل:
يمتد عملية تحميل الفئة العامة ActionSupport {عنوان السلسلة الخاصة ؛ تحميل الملف الخاص ؛ سلسلة خاصة exploadContentType ؛ سلسلة خاصة تحميل FloadFilename ؛ سلسلة خاصة SavePath ؛ public void setSavePath (قيمة السلسلة) {this.savepath = value ؛ } سلسلة خاصة GetSavePath () {String allPath = servleTactionContext.getServletContext (). getRealPath ("/web-inf/" + savepath) ؛ إرجاع RealPath ؛ } public void settitle (قيمة السلسلة) {this.title = value ؛ } السلسلة العامة getTitle () {return title ؛ } public void setupload (قيمة الملف) {this.upload = value ؛ } الملف العام getUpload () {return upload ؛ } public void setuploadContentType (قيمة السلسلة) {this.uploadContentType = value ؛ } السلسلة العامة getFileContentType () {return UploadContentType ؛ } public void setuploadfilename (قيمة السلسلة) {this.uploAdfilename = value ؛ } السلسلة العامة getUploAdfilename () {return UploadFilename ؛ } Override Public String Execute () يلقي استثناء {fileOtputStream fos = new FileOutputStream (getSavePath () + "//" + getUploAdfilename ()) ؛ fileInputStream fis = جديد fileInputStream (getUpload ()) ؛ Byte [] Buffer = New Byte [1024] ؛ int len = 0 ؛ بينما ((len = fis.read (buffer))> 0) {fos.write (buffer ، 0 ، len) ؛ } fis.close () ؛ fos.close () ؛ العودة النجاح }}ملف تكوين struts.xml:
<package name = "expload" تمديد = "Struts-Default"> <Action name = "topload"> <param name = "savepath">/upload </param> <result name = "success">/success.jsp </spress
لفئة العمل ، يتم تضمين اثنين من الخصائص الخاصة:
يتم استخدام هاتين السمة لتغليف اسم ملف الملف الذي تم تحميله ونوع الملف للملف الذي تم تحميله. بالنسبة إلى Struts2 ، إذا كان النموذج يحتوي على حقل ملف مع سمة الاسم XXX ، يحتاج الإجراء المقابل إلى استخدام ثلاث سمات لتغليف معلومات حقل الملف:
من خلال عملية التطوير المذكورة أعلاه ، يمكننا أن نرى أنه أمر بسيط في الواقع لتحميل الملفات من خلال Struts2. ما يتعين علينا القيام به هو ربط مجال الملف بخاصية من نوع الملف في العمل ، حتى نتمكن من الوصول بسهولة إلى محتوى الملف الخاص بالملف الذي تم تحميله. أما بالنسبة لكيفية استخدام Struts2 لمحلل متعددي ، فمن الشفاف تمامًا للمطورين.
قم بتنفيذ تصفية الملفات يدويًا
في كثير من الأحيان ، لا تسمح تطبيقات الويب للمستخدمين بالتحميل بحرية. نحتاج إلى الحد من نوع الملف وحجم الملف الذي تم تحميله بواسطة المستخدمين ، لذلك يجب تنفيذ تصفية الملفات أثناء تحميل الملف. الآن ، سنقوم بتنفيذ تصفية ملفات التحميل يدويًا.
قم بتكوين معلمة جديدة في Struts.xml للإشارة إلى نوع التحميل المدعوم:
<param name = "allowtypes"> Image/PNG ، Image/GIF ، Image/JPEG </param>
إضافة وظيفة التحقق من الصحة في العمل:
// تحقق من VOID Overridepublic Void () {String filterResult = filterType (getLoollyTypes (). split ("،")) ؛ if (filterResult! = null) {addFielderRor ("expload" ، "نوع الملف الذي تريد تحميله غير صحيح!") ؛ }} public string filterType (string [] types) {String fileType = getFileContentType () ؛ لـ (نوع السلسلة: أنواع) {if (type.equals (fileType)) {return null ؛ }} خطأ الإرجاع ؛} هذا فقط ينفذ نوع الحكم ، ثم ينفذ التحقق من الحجم بناءً على طريقة length() لفئة الملف. لكنها مزعجة للغاية ، دعنا نتحدث عن بيان أبسط.
يعرض التقاطع تصفية الملفات
يوفر Struts2 اعتراضًا لتحميل الملفات ، ويمكن تحقيق تصفية الملفات بسهولة أكبر من خلال تكوين اعتراض. fileUpload من تحميل الملف في Struts2. لكي يعمل المعترض ، تحتاج فقط إلى تكوين مرجع اعتراض في الإجراء.
عند تكوين اعتراض fileUpload ، يمكنك تحديد معلمتين لذلك:
<!-تكوين Interceptor fileUpload-> <interceptor-ref name = "fileUpload"> <param name = "leadtypes"> Image/png ، Image/GIF ، Image/jpeg </param> <param name = "maximumsize"> 20000000 </param>/interceptor-ref> <! name = "defaultStack"/> <result name = "success">/success.jsp </redress>
وبهذه الطريقة ، يمكن إجراء تعديل التكوين ، وهو أمر أسهل بكثير من كتابة قطعة من التعليمات البرمجية.
رسالة خطأ التكوين
لأخطاء التحميل ، سيطالب النظام رسائل الخطأ باللغة الإنجليزية افتراضيًا. ومع ذلك ، من أجل إخراج الرسائل المطبقة الدولية ، من الضروري إضافة تعريفات الرسالة الرئيسية التالية إلى ملف تكوين الموارد الدولي:
struts.messages.error.content.type.not.allowed = نوع ملف التحميل غير صحيح ، يرجى التحميل مرة أخرىstruts.messages.error.file.too.large = الملف الذي تم تحميله كبير جدًا ، يرجى تحميله مرة أخرىبعد ذلك ، يمكنك استخدام <s: fielderror/> لإخراج رسالة الخطأ.
تكوين مستمر لتحميل الملف
في بداية المقالة ، نتحدث عن التكوين struts.multipart.saveDir default.properties . إذن ما هي الوظيفة المحددة لعنصر التكوين هذا؟
أثناء عملية تحميل ملف Struts2 ، يجب تحديد مجلد مؤقت لتخزين الملفات المؤقتة التي تم إنشاؤها أثناء عملية التحميل ؛ إذا لم يتم تحديد مجلد مؤقت ، فإن النظام يتخلف عن استخدام javax.servlet.context.tempdir ، تحت العمل/catalina/localhost/path تحت مسار تثبيت tomcat. وهذا struts.multipart.savedir يقوم بتكوين موقع التخزين للملفات المؤقتة. لذلك ، أثناء عملية التطوير ، يجب عليك الانتباه إلى ما إذا كان الدليل قد قرأ وكتابة الأذونات.
يوجد أيضًا تكوين struts.multipart.maxSize ، والذي يمثل حجم الملف الذي تم تحميله. إذا تم تحديد خاصية الحد الأقصى لهذا التكوين والخاصية الحد الأقصى لحجم اعتراض fileUpload في نفس الوقت ، فسيتم مقارنة خاصية الحد الأقصى لتكوين struts.multipart.maxSize ، ثم مقارنة مع خاصية الحد الأقصى لاستقبال ملف fileupload. إذا تجاوز حجم الملف تكوين الحد الأقصى لـ struts.multipart.maxSize ، فسيظهر استثناء ولن يتم نقل النتيجة إلى الإدخال. تأكد من الانتباه إلى هذا.
لخص
تلخص هذه المقالة تحميل الملفات في Struts2 بالتفصيل. هناك الكثير من المحتويات ، بشكل أساسي جميع المحتويات في الدليل. حسنًا ، فقط استخدمه كدليل.
حسنًا ، ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.