عند العمل في أنظمة B/S ، فإنه يتضمن عادة تحميل الملفات وتنزيل الملفات. قبل الاتصال بإطار STRUTS2 ، نستخدم مكون FileUpload من المشاركات الفرعية تحت Apache لتحميل الملفات. ومع ذلك ، إذا فعلنا ذلك ، فإن الكود يبدو مرهقًا وغير مرن. بعد التعلم Struts2 ، يوفر Struts2 آلية تنفيذ أفضل لتحميل الملفات وتنزيله. هنا سأشرح رمز المصدر لتحميل الملفات الواحدة وتحميل الملفات المتعددة. نحتاج هنا إلى استيراد ملفين جارين تم تحميله بواسطة تنزيل الملف ، أحدهما هو المشاع-filepload -1.2.2.jar ، والآخر هو العموم-IO-2.0.1.JAR.
struts2 تحميل ملف واحد:
بادئ ذي بدء ، هناك صفحة تحميل ملف JSP. هذا بسيط نسبيًا ، إنه نموذج يحتوي على مربع تحميل ملف.
<!-عند تحميل الملف ، يجب أن تكون طريقة إرسال النموذج ، لأن الملف الثنائي قد يكون كبيرًا جدًا عند تحميل الملف. هناك أيضا سمة envtipe. يجب أن تتم كتابة هذه السمة على أنها multipart/form-data ، وإلا سيتم تحميلها على الخادم في النص الثنائي-> <form Action = "fileUpload.Action" method = "post" enctype = "multipart/form-data"> username: <input type = "text" name = "username"> <br> ملف: </form>
التالي هو جزء fileUploadAction من الكود. نظرًا لأن Struts2 يوفر آلية تدريب جيدة للتحميل والتنزيل ، نحتاج فقط إلى كتابة رمز صغير جدًا في العمل:
الطبقة العامة fileUploAdActaction يمتد الإجراءات Upport {private string username ؛ // لاحظ أن الملف لا يشير إلى الملف نفسه الذي تم تحميله بواسطة JSP الأمامي ، ولكن الملف الذي تم تحميله لتخزينه ضمن ملف الملف الخاص المجلد المؤقت ؛ // اسم الملف المقدم من سلسلة FileFilename ؛ // نوع MIME للملف المقدم من السلسلة الخاصة FileContentType ؛ السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } الملف العام getFile () {return file ؛ } public void setFile (file file) {this.file = file ؛ } السلسلة العامة getFileFileName () {return filefilename ؛ } public void setFileFilename (سلسلة fileFilename) {this.fileFiLename = fileFilename ؛ } سلسلة عامة getFileContentType () {return fileContentType ؛ } public void setFileContentType (سلسلة fileContentType) {this.fileContentType = fileContentType ؛ } Override Public String Execute () يلقي استثناء {String Root = servleTactionContext.getServletContext (). getRealPath ("/topload") ؛ inputStream هو = جديد fileInputStream (ملف) ؛ OutputStream OS = جديد fileOutputStream (ملف جديد (الجذر ، FileFilename)) ؛ System.out.println ("fileFilename:" + fileFilename) ؛ // لأن الملف هو ملف مخزّن في مجلد مؤقت ، يمكننا طباعة اسم الملف ومسار الملف الخاص به لمعرفة ما إذا كان هو نفسه ملف filefilename system.out.println ("الملف:" + file.getName ()) ؛ System.out.println ("file:" + file.getPath ()) ؛ Byte [] Buffer = New Byte [500] ؛ طول int = 0 ؛ بينما (-1! = (طول = IS.Read (Buffer ، 0 ، buffer.length)))) {os.write (buffer) ؛ } os.close () ؛ is.close () ؛ العودة النجاح }}بادئ ذي بدء ، يجب أن نكون واضحين أن الملف هنا لا يشير حقًا إلى الملف الذي تم تحميله بواسطة JSP. عند تحميل الملف ، سيبحث Struts2 أولاً عن موقع التخزين المحدد بواسطة Struts.multipart.savedir (هذا في الافتراضي. يمكننا إنشاء ملف خاصية Struts.properties جديدة لتحديد موقع تخزين الملفات المؤقت. إذا لم يتم تحديد ذلك ، فسيتم تخزين الملف في Apache-Tomcat-7.0.29/Work/Catalina/LocalHost/دليل. بعد ذلك ، يمكننا تحديد موقع التخزين بعد تحميل الملف ، واكتبه فقط إلى الدفق من خلال دفق الإخراج. في هذا الوقت ، يمكننا رؤية الملف الذي قمنا بتحميله في المجلد.
بعد تحميل الملف ، ما زلنا بحاجة إلى تنزيله. في الواقع ، مبدأ تنزيل Struts2 بسيط للغاية. إنه لتحديد دفق الإدخال ثم كتابة الملف في دفق الإدخال. لا يزال تكوين المفتاح هو تكوينه في ملف تكوين struts.xml:
رمز التشغيل المودع على النحو التالي:
تمتد الفئة العامة FileDownloadAction إلى الإجراءات {public inputstream getDownloadFile () {return servletactionContext.getServletContext (). } Override Public String Execute () يلقي استثناء {Return Success ؛ }}دعنا نرى أن هذا الإجراء يحدد فقط دفق الإدخال ثم يوفر له طريقة getter. بعد ذلك ، لنلقي نظرة على ملف التكوين لـ Struts.xml:
<action name = "filedownload"> <result name = "success" type = "dream"> <param name = "contentDisposition"> filename = "book address 4 September 4 ، 2012.xls" </param>
هناك العديد من الأشياء التي نحتاج إلى الانتباه إليها في ملف تكوين STRUTS.xML. بادئ ذي بدء ، نوع النتيجة. في الماضي ، حددنا إجراء. نحن في الأساس لم نكتب سمة النوع في النتيجة ، لأنها الافتراضية لطلب إعادة التوجيه (المرسل). بالإضافة إلى هذه السمة ، هناك قيم بشكل عام مثل إعادة التوجيه (إعادة التوجيه). هنا ، نظرًا لأننا نستخدم تنزيل الملف ، يجب تعريف النوع على أنه نوع الدفق ، وإخبار الإجراء. هذا هو نتيجة تنزيل الملف. هناك عمومًا عناصر فرعية Param في عنصر النتيجة. يتم استخدام هذا لتعيين المعلمات عند تنزيل الملف. E هذه الخاصية هي الحصول على دفق إدخال الملف في العمل. يجب أن يكون الاسم هو نفسه سمة دفق الإدخال في العمل. ثم سمة contentDisposition هي سمة contentDisposition. يتم استخدام هذه الخاصية بشكل عام لتحديد كيف نريد معالجة الملف الذي تم تنزيله. إذا كانت القيمة مرفقًا ، فسيظهر مربع التنزيل ، مما يسمح للمستخدم باختيار ما إذا كان سيتم التنزيل. إذا لم يتم تعيين هذه القيمة ، فسيقوم المتصفح أولاً بالتحقق مما إذا كان سيتم فتح الملف الذي تم تنزيله. إذا كان بإمكانه ذلك ، فسوف يفتح الملف الذي تم تنزيله مباشرة (بالطبع ، هذا ليس ما نحتاجه). قيمة أخرى هي اسم الملف ، وهو اسم تنزيل الملف الذي يُطلب منه الملف عند التنزيل. بعد تكوين هذه المعلومات ، يمكننا تنفيذ وظيفة تنزيل الملف.
struts2 تحميل الملفات المتعددة :
في الواقع ، فإن مبدأ التحميل متعدد الملفات هو نفس تحميل الملف الفردي. تحميل ملف واحد هو ملف واحد ، وقائمة <IPLE> مجموعة أو ملف [] تم تحميل ARRAY. أولاً ، دعونا نلقي نظرة على رمز جزء JSP الأمامي. لقد استخدمت هنا jQuery لتنفيذ إضافة الملفات الديناميكية ومربعات تنزيل الحذف الديناميكي:
<script type = "text/javaScript" src = "script/jquery-1.8.1.js"> </script> <script type = "text/javaScript"> $ (function () {$ ("#button"). انقر فوق (function () {var html = $ ( value = 'delete'> <br> ") ؛ $ ("#body div "). إلحاق (html) .append (زر) ؛ button.click (function () {html.remove () enctype = "multipart/form-data"> اسم المستخدم: <type type = "text" name = "username"> <br> الملف: <input type = "file" name = "file"> <input type = "button" value = "add" id = "button" يجب تسمية أسماء الملفات ، ثم رمز الإجراء لتحميل الملفات المتعددة هو كما يلي:
الطبقة العامة fileUploAdAction2 يمتد الإجراءات {{private string username ؛ // هنا نستخدم قائمة لتخزين الملفات التي تم تحميلها. يشير الملف أيضًا إلى الملفات المؤقتة في مجلدات مؤقتة ، بدلاً من ملف الملفات الخاص التي تم تحميلها بالفعل <file> ؛ // تخزن هذه القائمة اسم الملف ، المقابل للملف في القائمة <File> قائمة خاصة <Tring> FileFilename ؛ قائمة خاصة <string> fileContentType ؛ السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } القائمة العامة <ilect> getFile () {file file ؛ } public void setFile (list <ible> file) {this.file = file ؛ } القائمة العامة <string> getFileFilename () {return filefilename ؛ } public void setFileFilename (قائمة <Tring> fileFiLename) {this.fileFiLename = fileFilename ؛ } القائمة العامة <string> getFileContentType () {return fileContentType ؛ } public void setFileContentType (قائمة <string> fileContentType) {this.fileContentType = fileContentType ؛ } Override Public String Execute () يلقي استثناء {String Root = servleTactionContext.getServletContext (). getRealPath ("/topload") ؛ لـ (int i = 0 ؛ i <file.size () ؛ i ++) {inputStream هو = جديد fileInputStream (file.get (i)) ؛ OutputStream OS = FileOutputStream جديد (ملف جديد (الجذر ، filefilename.get (i))) ؛ Byte [] Buffer = New Byte [500] ؛ suppressWarnings ("غير مستخدم") طول int = 0 ؛ بينما (-1! = (طول = IS.Read (Buffer ، 0 ، buffer.length)))) {os.write (buffer) ؛ } os.close () ؛ is.close () ؛ } نجاح العودة ؛ }}هذا يكتبه أيضًا في دفق إخراج ، حتى نتمكن من رؤية ملفات تم تحميلها متعددة في المجلد
إن تنزيل الملف التالي هو بالضبط نفس الملف الآن ، والشيء نفسه هو struts.xml ، لذلك لن أكرره هنا.
ملخص: بشكل عام ، تعمل آلية تحميل الملف والتنزيل المقدمة من Struts2 على تبسيط الكثير من التعليمات البرمجية الخاصة بنا. يمكننا استخدام هذه الآلية في المشاريع المستقبلية. يمكننا أيضًا استخدام مكون FileUpload لتحميل الملفات. يتم تحديد كل هذا من خلال التفضيلات الشخصية!
لا يوجد سوى الكثير من المحتوى حول وظائف تحميل الملفات والتنزيل في Javaweb ، شكرًا لك على قراءتك.