تشارك هذه المقالة رمز التنفيذ المحدد لتحميل وتنزيل ملفات Struts2 للرجوع إليها. المحتوى المحدد كما يلي
1. تحميل الملف
قم بتحميل مكون الملف المقدم بواسطة الدعامات ،
مكتب الاستقبال:
1) طريقة التقديم
2) نوع النموذج multipart/form-data
3) نوع الإدخال = ملف
وراء الكواليس:
مكون FileUpload الذي قدمته Apache
الفئة الأساسية:
FileItemFactory FileItem Factory
ServletFileUpload Core Class لتحميل الملف في Servlet
يقوم FileItem بتغليف معلومات عناصر ملف النموذج التي تم تحميلها. باختصار ، يعد تحميل الملف أكثر إزعاجًا للمعالجة.
قم بتحميل ملف STRUTS ' <BR /> اعتراض ملفات الملف يساعدنا على وظيفة تحميل الملف المتأخرة
<اسم اعتراض = "fileUpload"/>
تحميل. xml
<struts> <package name = "upload_" تمديد = "Struts-Default"> <!-ملاحظة: الكلمة الرئيسية "FileUpload" لا يمكن استخدامها مع الكلمة الرئيسية "fileUpload"-> <Action name = "fileUploadAction"> <! name = "fileupload.allowedextensions"> txt ، jpg ، jar </param> <!-تقييد أنواع الملفات التي تعمل [المستخدمة في نفس الوقت كما ورد أعلاه ، احصل على تقاطع] <param name = "fileupload.allowedtypes"> text/plain </param> </interceptor-ref> <result name = "input">/e/error.jsp </redress> </sociat
تحميل. jsp
<Body> <form Action = "$ {pagecontext.request.contextpath}/fileuploadaction" method = "post" enctype = "multipart/form-data"> username: <type type = "text" name = "username"> <br/> ملف: </body>error.jsp
<body> error.jsp <br/> <!-عرض جميع رسائل الخطأ التي تم إنشاؤها بواسطة إطار الدعامات أثناء وقت التشغيل-> <٪@ taglib uri = "/struts-tags" prefix = "s" ٪> <s: fielderror> </s: fielderror> </body> success.jsp <body>
الكود الأساسي
fileUpload .class
يمتد FileUpload الفئة العامة ActionSupport {// النموذج المقابل: <input type = "file" name = "file1"> private file1 ؛ // اسم الملف السلسلة الخاصة file1filename ؛ // نوع الملف (MIME) سلسلة خاصة file1ContentType ؛ public void setFile1 (file file1) {this.file1 = file1 ؛ } public void setfile1filename (سلسلة file1filename) {this.file1filename = file1filename ؛ } public void setFile1ContentType (string file1contenttype) {this.file1contenttype = file1contenttype ؛ } Override Public String Execute () يلقي استثناء {/********* احصل على الملف الذي تم تحميله ومعالجته *******///قم بتحميل الملف إلى دليل التحميل // الحصول على مسار مسار الدليل المحمّل = servletactionContext.getServletContext (). getRealPath ("/تحميل") ؛ // إنشاء ملف كائن ملف الهدف destfile = ملف جديد (path ، file1filename) ؛ // انسخ الملف الذي تم تحميله إلى الهدف fileutils.copyfile (file1 ، destfile) ؛ العودة النجاح }} تفاصيل معالجة تحميل الملف
أ. حد حجم الملف
الحد الأقصى لتحميل الملف الذي تدعمه الهياكل هو 2M افتراضيًا ، ويتم تعديله بواسطة الثوابت:
<!-4. تعديل الحد الأقصى لحجم الملفات التي تم تحميلها إلى 30 مترًا->
<name constant = "struts.multipart.maxSize" value = "31457280"/>
ب. تقييد النوع المسموح به من الملفات التي تم تحميلها: يُسمح فقط بتقاطعات الملفات مع لاحقة TXT/JPG: حقن معلمات للحد من أنواع تحميل الملفات
<!-تقييد نوع الملف الذي تم تحميله-> <interceptor-ref name = "defaultStack"> <!-تقييد تمديد الملف الذي يعمل-> <param name = "fileupload.allowedextensions" name = "fileupload.allowedTypes"> text/plain </param>-> </stilection-ref>
2. قم بتنزيل الملف
تنزيل ملف الدعامات ، طريقتان:
الطريقة 1: اكتب بيانات دفق البايت إلى المتصفح من خلال كائن الاستجابة ؛ اضبط طريقة رأس الاستجابة للتنزيل 2: Struts Method
قم بتنزيل ملف الدعامات:
انسخ الرمز كما يلي: <name-type result = "Stream"/>
أولاً ، يرجى ملاحظة أنك تقوم بإنشاء مجلد تحميل جديد في دليل Webroot ووضع الملف الذي تريد تقديمه إلى المجلد الذي تم تنزيله.
تحميل. xml
<action name = "down_*" method = "{1}"> <!-عرض القائمة-> <result name = "list">/e/list.jsp </redress> <!-تنزيل التشغيل-> <result name = "download" type = "dream"> <! خاصية الدفق [فعليًا getAttRinputStream ()]-> <param name = "inputName"> attrinputStream </param> <!-رأس التنزيل ، بما في ذلك: اسم الملف الذي يتم عرضه بواسطة المتصفح-> <param name = "contentDisposition"> filename = $ {downfilename} </ </result> </Action>list.jsp
<Body> <table align = "center"> <tr> <td> الرقم </td> <td> اسم الملف </td> <td> العملية </td> </td> <٪@tglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c: varstatus = "vs"> <tr> <td> $ {vs.count} </td> <td> $ {filename} </td> <td> <!-إنشاء url-> <c: url var = "url" value = "down_down" <a href = "$ {url}"> تنزيل </a> </td> </tr> </c: foreach> </table> </body>الانخفاض
/***تنزيل الملف*1. إظهار قائمة جميع الملفات المراد تنزيلها*2. تنزيل الملف** /class public class. إظهار قائمة جميع الملفات التي سيتم تنزيلها ***************************************** () رمي الاستثناء {// احصل على مسار سلسلة التحميل = servletactionContext.getServletContext (). getRealPath ("/upload") ؛ // ملف كائن الدليل = ملف جديد (مسار) ؛ // احصل على اسم الملف لجميع الملفات المراد تنزيلها [] filenames = file.list () ؛ // حفظ ActionContext ac = ActionContext.getContext () ؛ // احصل على الخريطة التي تمثل خريطة الطلب (الطريق الثاني) <string ، Object> request = (MAP <String ، Object>) ac.get ("request") ؛ request.put ("أسماء الملفات" ، أسماء الملفات) ؛ إرجاع "قائمة" ؛ } /**************** 2. ملف تنزيل ****************************/ // 1. public void setFilename (اسم ملف السلسلة) {// التعامل مع المشكلة في المعلمات التي تم تمريرها (الحصول على التقديم) جرب {fileName = new string (filename.getBytes ("ISO8859-1") ، "UTF-8") ؛ } catch (UnsupportedEncodingException e) {رمي new runTimeException (e) ؛ } // تعيين this.filename = filename ؛ } // 2. قم بتنزيل طريقة العمل المقدمة (تكوين الدفق في Struts.xml) السلسلة العامة Down () رمي الاستثناء {return "download" ؛ } // 3. طرق لإرجاع دفق الملفات العامة inputstream getAttRinputStream () {return servletactionContext.getServletContext (). getResourCeasStream ("/upload/" + filename) ؛ } // 4. قم بتنزيل اسم الملف المعروض (اسم الملف الذي تم عرضه بواسطة المتصفح) السلسلة العامة getDownFilename () {// التكرار الصيني مطلوب try {fileName = urlencoder.encode (filename ، "UTF-8") ؛ } catch (UnsupportedEncodingException e) {رمي new runTimeException (e) ؛ } اسم ملف الإرجاع ؛ }}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.