بجانب المقالة السابقة:
2. تحميل الملف والتنزيل
ثلاث حيل تم تطويرها بواسطة Struts2 ، صفحة JSP - STRUTS2.XML
تحميل الملف المتطلب السابق:
يجب نشر طريقة النموذج
يجب أن يكون enctype من النموذج multipart/form data
توفير حقل إدخال التحميل من type = "ملف"
بعض قواعد دعم الدعامات لتحميل الملفات
1. تحميل ملف واحد
خطوات التنمية:
1) أضف المشاعات-FilePload-1.2.1.Jar and Commons-IO-1.3.2jar تحت الويب-Inf/lib. يمكن تنزيل هذين الملفان من http://commons.apache.org/
2) الخطوة 2: اكتب upfile.jsp ، وقم بتعيين enctype من جدول النماذج إلى: "multipart/form-data" ، على النحو التالي:
<٪@ page language = "java" import = "java.util. Action = "$ {pagecontext.request.contextpath} /Upload1.Action" method = "post" enctype = "multipart/form-data"> <!-تمرير في mime-> username: <input type = "text" name = "username"/> <br/> الصور الجميلة: value = "تحميل"/> </form> </body>اكتب خطأ صفحة الخطأ. jsp
<Body> الخادم مشغول ، حاول مرة أخرى بعد فترة. </body>
النجاح
<Body> التحميل بنجاح </body>
3) كتابة فئة التحميل 1: إضافة سمات إلى فئة الإجراء ، وتتوافق السمات مع اسم حقل الملف في النموذج:
package com.itheima.actions ؛ import java.io صورة ملف خاص ؛ // بما يتوافق مع اسم حقل التحميل للنموذج. النوع هو نوع الملف السلسلة الخاصة photofilename ؛ // تحميل اسم الملف السلسلة الخاصة photocontentType ؛ // تحميل ملف mime // refter getter و setter methods public expload () {system.out.println (photofilename+":"+photocontenttype) ؛ // الحقل العادي: system.out.println (اسم المستخدم) ؛ // حقل التحميل: تحميل إلى مجلد. احفظه إلى سلسلة صور الصور الخاصة بالتطبيق realPath = servleTactionContext.getServletContext (). getRealPath ("/Images") ؛ دليل الملف = ملف جديد (RealPath) ؛ if (! directory.exists ()) {directory.mkdirs () ؛ } جرب {fileutils.copyfile (صورة ، ملف جديد (دليل ، photofilename)) ؛ العودة النجاح } catch (ioException e) {E.PrintStackTrace () ؛ عودة الخطأ ؛ }}}أضف التكوين التالي إلى ملف struts.xml
<action name = "upload1" method = "upload"> <interceptor-ref name = "defaultStack"> <param name = "fileupload.allowedTypes"> image/jpeg ، image/png </parm> <param name = "fileupload.allowedextensionsset" <Repress> /success.jsp </redress> <result name = "error">/error.jsp </redress> <result name = "input">/index.jsp </redress> </uction>
تحليل المبدأ:
أ. إن اعتراض FileUpload مسؤول عن التعامل مع عمليات تحميل الملفات. إنه عضو في مكدس اعتراض الافتراضي الافتراضي. يحتوي Interceptor على 3 خصائص يمكن ضبطها.
• الحد الأقصى: الحد الأقصى لطول الملف الذي تم تحميله (بالبايت) ، القيمة الافتراضية هي 2 ميغابايت
• الأنواع المسموح بها: الأنواع التي تسمح بتحميل الملفات ، مفصولة بفواصل.
• المسموح بها: يسمح بتحميل ملحقات الملفات. يمكن كتابة هذه الخصائص الثلاثة في ملف struts.xml عن طريق فصل الفاصلة كل ملحق.
ب. تحميل الملفات التي تتجاوز الحجم أو بشكل غير قانوني سيؤدي إلى خطأ (اتجه إلى عرض إدخال)
يمر:
<S: Actionerror/> <s: نصيحة feilderror/> لعرض رسالة الخطأ
ج. تغيير موجه رسالة الخطأ إلى الإصدار الصيني: بمساعدة ملفات موارد الرسائل الدولية
إذا كان الخطأ ناتجًا عن تكوين المعلمات الافتراضية العالمية ، فمن الأفضل استخدام ملف موارد الرسائل العالمي.
ملف المورد الافتراضي لـ Struts2: Struts-message.properties ملف STRUTS2-CORE-**. JAR. فقط قارن القيمة الرئيسية للكتابة فوق القيمة المقابلة.
التكوين كما يلي:
struts.messages.error.uploading = خطأ تحميل: {0}
struts.messages.error.file.too.large = ملف كبير جدًا: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = type المحتوى غير مسموح به: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = تمديد الملف غير مسموح به: {0} "{1}" "{2}" {3}
{0}: قيمة سمة الاسم في <type type = "file" name = "uploadImage">
{1}: الاسم الحقيقي للملف الذي تم تحميله
{2}: اسم ملف التحميل الذي تم حفظه في الدليل المؤقت
{3}: نوع الملف الذي تم تحميله (لـ struts.messages.error.file.too.large هو حجم الملف الذي تم تحميله)
رمز المصدر:
قم بتعديل معلومات ملف المورد الذي يعرض الخطأ
الخطوة 1: إنشاء ملف موارد جديد مثل fileUploadMessage.properties ، ضعه ضمن SRC لإضافة المعلومات التالية إلى ملف المورد
struts.messages.error.uploading = خطأ التحميل: {0}
struts.messages.error.file.too.large = ملف التحميل كبير جدًا: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = نوع الملف الذي تم تحميله غير مسموح به: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowd = اسم لاحقة الملف الذي تم تحميله غير مسموح به: {0} "{1}" "{2}" {3}
الخطوة 2: تحميل ملف المورد في ملف struts.xml
<!-تكوين ملف الموارد لمعلومات الخطأ حول تحميل الملفات->
<name constant = "struts.custom.i18n.Resources" value = "cn ...
2. تحميل ملفات متعددة
قم بتحميل ملفات متعددة ، يمكنك استخدام المصفوفات أو القوائم ، والآخر يشبه تحميل الملفات المفردة.
package com.itheima ملف خاص [] صورة ؛ // بما يتوافق مع اسم حقل التحميل للنموذج. النوع هو نوع الملف. احفظه إلى سلسلة صور الصور الخاصة بالتطبيق realPath = servleTactionContext.getServletContext (). getRealPath ("/Images") ؛ دليل الملف = ملف جديد (RealPath) ؛ if (! directory.exists ()) {directory.mkdirs () ؛ } حاول {for (int i = 0 ؛ i <photo.length ؛ i ++) {fileUtils.copyfile (photo [i] ، ملف جديد (دليل ، photofilename [i])) ؛ } نجاح العودة ؛ } catch (ioException e) {E.PrintStackTrace () ؛ عودة الخطأ ؛ }}}3. تنزيل الملف
المبدأ: يوفر Struts2 نوع نتيجة الدفق ، وهو نوع نتيجة دفق محدد يستخدم خصيصًا لدعم وظيفة تنزيل الملف. يتطلب تحديد معلمة inputName. تحدد هذه المعلمة دفق إدخال وتوفر الإدخال إلى الملف الذي تم تنزيله.
خطوات الترميز:
1) Action Class DownloadAction:
package com.itheima.actions ؛ import java.io.file ؛ import java.io.fileinputStream ؛ import java.io.filenotfoundexception ؛ import java.io.inputstream ؛ import java.net.urlencoder com.opensymphony.xwork2.Actionsupport ؛ فئة التنزيل العام يمتد ActionSupport {private inputstream image ؛ // استخدم في اسم ملف السلسلة الخاصة مع مشكلة ؛ // اسم الملف الخاص بالملفات الطويلة ؛ public inputstream getImage () {return image ؛ } public void setImage (ImputStream image) {this.image = Image ؛ } السلسلة العامة getFilename () {return filename ؛ } public getFilesize () {return filedize ؛ } السلسلة العامة تنزيل () يلقي استثناء {// تعيين القيمة إلى سلسلة بايت بايت سلسلة fileerealpath = servletactionContext.getServletContext (). getRealPath ("/web-inf/如 .jpg") ؛ filename = filenameUtils.getName (filerealpath) ؛ // الطريقة 1: يجب أن يكون الملف الصيني مشفرًا عن عنوان URL // filename = urlencoder.encode (اسم الملف ، "UTF-8") ؛ filesize = ملف جديد (filerealpath) .length () ؛ system.out.println (اسم الملف) ؛ Image = new FileInputStream (FilerealPath) ؛ العودة النجاح }}ملف تكوين struts.xml: قم بتكوين نتائج نوع الدفق بشكل أساسي
<struts> <name constant = "struts.devmode" value = "true" /> <name constate = "struts.ognl.allowStaticMethodAccess" value = "true" /> <action name = "download" method = "download"> <result type = "dream"> <param name = "contentType"> Application/Octet-tream </param> <!-أخبر رأس استجابة المتصفح ، وتنسيق MIME للملف ، واستدعاء طريقة getContentType في العمل-> <!-استخدم التعبير ognl في Struts.xml للحصول على قيمة الخاصية في فئة العمل. استدعاء getFilename () في فئة الإجراء-> <!-اسم الملف الصيني الترميز: الطريقة 2. استخدم تعبيرات ognl للاتصال بالطريقة الثابتة لـ urlencode-> <!-لا يمكن إجراء طرق ثابتة من المكالمات الافتراضية. تحتاج إلى تشغيل مفتاح ثابت ثابت. </result> </Action> </package> </surots>
اعتراض وعملية تحميل الملف هنا. إنه متعب للغاية ، لكنه مليء بالإنجاز.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.