تعد تحميل ملف Java وتنزيل الملف وظائف شائعة نسبيًا في تطوير البرنامج. ستقدم المقالة التالية لك ثلاثة حلول لتنفيذ تحميل الملفات وتنزيلها في Java. التفاصيل المحددة هي كما يلي ؛
النقطة الأولى: رمز Java ينفذ تحميل الملف
formfile file = manform.getFile () ؛ String newFiLename = null ؛ string newPathName = null ؛ string fileaddre = "/numup" ؛ جرب {inputStream Dream = file.getInputStream () ؛ // اقرأ الملف في السلسلة filepath = request.getRealPath (fileaddre) ؛ file1) .mkdir () ؛ newFiLename = system.currentTimEmillis ()+ file.getFilename (). newFiLename) ؛ newPathName = filePath+"/"+newFilename ؛ system.out.println (newPathName) ؛ // إنشاء دفق إخراج لتحميل ملفات system.out.println (filepath+"/"+file.getFilename ()) بينما (((bytesread = dream.read (buffer ، 0 ، 8192))! = -1) {bos.write (buffer ، 0 ، bytesread) ؛ // اكتب الملف إلى الخادم} bos.close () {E.PrintStackTrace () ؛}النقطة الثانية: قم بتنفيذ تحميل الملف على صفحة JSP
package com.vogoal.util ؛ import java.io.bufferedoutputstream ؛ import java.io javax.servlet.servletinputstream ؛ استيراد javax.servlet.http.httpservletrequest ؛ الفئة العامة jspfileUpload {/** طلب كائن*/private httpservletrequest request = null ؛/** path لتحميل الملف*/private orgpathpatppath = null ؛ = 1024*8 ؛/** علامة التجزئة التي تخزن المعلمات*/private hashtable paramht = new hasptable () ؛/** arraylist التي تخزن اسم ملف الملف الذي تم تحميله*/arraylist private updfilearr = new arraylist () ؛/*** تعيين كائن الطلب. ** request request* httpservletrequest كائن*/public void setRequest (طلب httpservletrequest) {this.request = request ؛}/*** قم بتعيين مسار تحميل الملف. * * param path * مسار التحميل للملف المحدد من قبل المستخدم. */public void setuploadpath (مسار السلسلة) {this.uploadpath = path ؛}/*** البرنامج الرئيسي لمعالجة تحميل الملف. �����b * * return int result 0 كانت عملية الملف ناجحة ؛ 1 طلب كائن غير موجود. 2 لم يتم تعيين مسار حفظ الملف أو مسار حفظ الملف غير صحيح ؛ 3* لم يتم تعيين enctype الصحيح ؛ 4 عملية الملف غير طبيعية. */Public Int Process () {int status = 0 ؛ // قبل تحميل الملف ، تحقق من كائن الطلب ومسار التحميل و enctype. الحالة = precheck () ؛ // إرجاع رمز الخطأ عند حدوث خطأ. إذا (الحالة! = 0) حالة الإرجاع ؛ حاول {// �� المعلمة أو اسم الملف �u�� string name = null ؛ // parameter valuestring value = null ؛ // ما إذا كان دفق القراءة هو بتات ملف fileflag = false ؛ // ملف لتخزينه. file tmpfile = null ؛ // اسم سلسلة الملفات المحمّلة fname = null ؛ fileOutputStream baos = null ؛ bufferedoutputstream bos = null ؛ // ��hashtableht = new hashtable () ؛ updfilearr = new arraylist () ؛ int rtnpos = 0 ؛ �get contentTyPestring contentType = request.getContentType () ؛ int index = contentType.Indexof ("boundary =") ؛ string prowerary = "-" + contentType.SubString (index + 9) ؛ string endboundary = boundary + "-" servletInputStream sis = request.getInputStream () ؛ // قراءة سطر واحد بينما ((rtnpos = sis.readline (buffs ، 0 ، buffs.length))! = -1) {String strbuff = new string (buffs ، 0 ، rtnpos) ؛ name.trim (). length ()> 0) {if (fileflag) {bos.flush () ؛ baos.close () ؛ bos.close () ؛ baos = null ؛ bos = null ؛ updfiLeArr.add (fname) ؛ (arraylist) obj ؛} al.add (value) ؛ system.out.println (value) ؛ paramht.put (name ، al) ؛}} name = new string () ؛ value = new string () ؛ fileflag = false ؛ السلسلة (Buffs ، 0 ، rtnpos) ؛ if (strbuff.tolowercase (). startswith ("dispositation: form-data ؛"))) {int nindex = strbuff.tolowercase (). indexof ("name =/" ") ؛ int nlastindex = strbuff.tolowercase (). strbuff.substring (nindex + 6 ، nlastIndex) ؛} int findex = strbuff.tolowercase (). indexof ("filename =/" ") ؛ if (findex! = -1) {fileflag = true ؛ int flastindex = strbuff.toLowerCase (). indexof (/"/" flastindex) ؛ fname = getFilename (fname) ؛ if (fname == null || fname.trim (). length () == 0) {fileflag = false ؛ sis.readline (buffs ، 0 ، buffs.length) ؛ sis.readline (buffs ، 0 ، buffs.length) ؛ sis.readline (buffs ، 0 ، buffs.length) ؛ متابعة ؛ buffs.length) ؛ sis.readline (buffs ، 0 ، buffs.length) ؛}}}} آخر إذا (strbuff.startswith (endboundary)) {if (name! = null && name.trim (). null ؛ updfilearr.add (fname) ؛} else {object obj = paramht.get (name) ؛ arraylist al = new ArrayList () ؛ if (obj! = null) {al = (arraylist) obj ؛} al.add (value) ؛ paramht.put bos == null) {tmpfile = ملف جديد (uploadpath + fname) ؛ baos = new FileOutputStream (tmpfile) ؛ bos = new BufferedOutputStream (baos) ؛ strbuff) ؛ value = value + strbuff ؛}}}} catch (ioException e) {status = 4 ؛ UploadPath.trim (). length () == 0) return 2 ؛ else {file tmpf = new file (eploadpath) ؛ if (! name) {string value = "" ؛ if (name == null || name.trim (). length () == 0) قيمة الإرجاع ؛ value = (paramht.get (name) == null)؟ name.trim (). length () == 0) return null ؛ if (paramht.get (name) == null) return null ؛ ArrayList al = (ArrayList) paramht.get (name) ؛ string [] strarr = new string [al.size ()] getUpDfilesize () {return updidfilearr.size () ؛} السلسلة العامة [] getUpDfilenames () {String [] getFiLename (إدخال السلسلة) {int findEx = input.lastIndexof ("//") ؛ if (findEx == -1) {findEx = input.lastindexof ("/") ؛ if (findEx == -1) {input ؛}} input = input.substring (findex + 1) ؛ input.indexof (".") ؛ Date dt = new Date () ؛ SimpleDateFormat sdf = new SimpleDateFormat ("Yyyymmddhhmmssssss")2. الرجوع إلى فئة Java في صفحة JSP:
<٪@page import = "com.vogoal.util.jspfileupload" ٪> <٪ // تهيئة jspfilepload jfu = new jspfileupload () ؛ // قم بتعيين كائن request jfu.setRequest (request) ؛ // قم بتعيين مسار الملف المحمّل jfu.setpathpath ( jfu.process () ؛ // احصل على قيم معلمات التحكم في الإدخال الأخرى في اسم المستخدم username = jfu.getParameter ("اسم المستخدم") ؛ // إذا كانت هناك عناصر تحكم متعددة في الإدخال لنفس المعلمة ، فاحصل jfu.getupdfilenames () ؛ // الحصول على عدد الملفات التي تم تحميلها ، هذه الطريقة غير مجدية بعض الشيء filenumber = jfu.getupdfilesize () ؛ // فيما يلي إخراج الكود للاختبار. // out.println ("المعلمة:" + اسم المستخدم) ؛ // out.println ("حجم المعلمة:" + usernamearr.length) ؛ // out.println ("حجم filearr:" + filearr.length) ؛ // if (filearr.length> 0) // out.println (النقطة الثالثة: STRUTS2 ينفذ تحميل الملف وتنزيله
الخطوة 1: إضافة العموم filepload -1.2.1.jar و commons-IO-1.3.2. يمكن تنزيل هذين الملفان من http://commons.apache.org/.
الخطوة 2: اضبط enctype من جدول النماذج إلى: "multipart/form-data" ، على النحو التالي:
كود جافا
الطبقة العامة تحميل {Private File UploadImage ؛ // File private string uploadimageContentType ؛ // type type private string uploadImageFilename ؛ // file name private bookname ؛ }}ملاحظة: يتوافق مجال الملف في نموذج مع ثلاث خصائص في الإجراء ، وهي اسم الملف ونوع الملف. تم إصلاح التسمية. يجب أن يكون اسم الملف هو نفسه اسم مجال الملف في النموذج (UploadImage). اسم الملف هو: File + Filename ، ونوع الملف: File + ContentType.
الخطوة 4: تكوين إجراء التحميل الخاص بنا في Struts.xml.
كود جافا
<action name = "upload"> <param name = "savepath">/uploadfile </param> <result> /success.jsp </reduct> </action>
ملاحظة: لتحديد دليل حفظ الملف الذي تم تحميله على الخادم ، تحتاج إلى تحديد متغير SavePath في OploadAction وإضافة طرق Setter و Getter المقابلة ، بحيث يمكن لـ Struts2 تعيين /تحميل قيمة FloadFile إلى سمة SavePath ، أي لاستخدام متغير SavePath في التحميل ، يجب أن تحددها في مجال التحميل.
نوع ملف تصفية التكوين اليدوي
<param name = "allowtypes"> Image/BMP ، Image/PNG ، Image/GIF ، Image/JPEG </param>
حد حجم ملف التكوين اليدوي
<param name = "MaximumSize"> 1048576 </param>
استخدم اعتراض تحميل ملف Struts2 لتنفيذ تصفية الملفات
يوفر Struts2 اعتراضًا لتحميل الملف - FileUpload. من خلال تكوين هذا التقاطع ، يمكن تحقيق تصفية الملفات التي تم تحميلها بسهولة.
عند تكوين اعتراض fileUpload ، يمكنك تحديد معلمتين لذلك:
الأنواع المسموح بها: يحدد نوع الملف المسموح بتحميله ، مفصولة بفاصلة باللغة الإنجليزية (،).
MaximumSize: يحدد حجم الملف المسموح بتحميله بالبايت.
نصيحة: من خلال تكوين اعتراض fileUpload ، يمكنك بسهولة تنفيذ تصفية الملفات. عند فشل تصفية الملف ، سيتم نقل النظام تلقائيًا إلى العرض المنطقي للإدخال. لذلك ، يجب تكوين العرض المنطقي المسمى الإدخال للعمل. بالإضافة إلى ذلك ، يجب تكوين مرجع التقاطع لـ DefaultStack للعمل.
استخدم اعتراض Struts2 لتنفيذ تكوين تصفية الملفات على النحو التالي:
<action name = "uploadFileAction"> <interceptor-ref name = "defaultStack"> <!-قم بتكوين نوع الملف المسموح به لتحميله ، مفصولة بمتعدد باستخدام "،"-> <param name = "fileupload.allowedtypes"> image/bmp ، png/png ، image/gif ، image/jopeg ، image ، jpg ، jpg ، jpg ، jpg ، jpg ، jpg ، <!-قم بتكوين حجم الملف المسموح به لتحميله ، وحدات الوحدة ، هذا المثال هو: 1MB-> <param name = "fileupload.maximumsize"> 1048576 </param> </stension-res> <result name = "input">/jsp/OneFileFileUpload.jsp </action>
عندما يفشل المستخدم في التحميل ، هناك رسالة موجهة معينة. في Struts2 ، استخدم علامة <s: fielderror/> لإخراج رسالة الخطأ إلى الصفحة.
ملاحظة: إذا كنت ترغب في استخدام معلومات موجه خطأ Struts2 ، فإن فئة الإجراء التي تقوم بتحميل الملف يجب أن يرث الإجراءات ، وإلا فلن يوفر Struts2 وظيفة معلومات موجه خطأ الإخراج.
يمكننا تكوين ملفات الموارد (.properties) لحفظ إخراج المعلومات للمستخدم.
struts.messages.eror.file.too.large: عندما يتجاوز حجم ملف التحميل القيمة المحددة ، ستخرج Struts2 معلومات المطالبة المقابلة للمفتاح.
struts.messages.error.content.type.not.lowed: عندما لا يفي نوع الملف المحمّل بالقيمة المحددة ، ستقوم Struts2 بإخراج معلومات المطالبة المقابلة للمفتاح.
struts.messages.error.uploading: عندما يحدث خطأ غير معروف عند تحميل ملف ، ستقوم Struts2 بإخراج معلومات المطالبة المقابلة للمفتاح.
نحتاج أيضًا إلى تكوين ملف المورد في ملف Struts.xml. بعد ذلك ، علينا أن ننظر إلى ملف المورد الخاص بنا. أنه يحتوي بالفعل على الصينية. علينا تحويله ثم تكوينه في المشروع.
اضبط ملف المورد في Struts.xml:
<name constant = "struts.custom.i18n.Resources" value = "messages"/> أو <statter name = "struts.custom.i18n.Resources" value = "messages_zh_cn"/>
استخدم Command Native2ascii d: /messages.properties d: /messages_zh_cn.properties لتحويل ملف المورد الأصلي إلى مورد مدعوم.
ملاحظة: الحفاظ على الدولية ، اسم لاحقة ملف المورد هي: *_zh_cn + امتداد ملف.
مبدأ تحميل الملفات المتعددة هو نفسه كما هو مذكور أعلاه ، ولكن تجدر الإشارة إلى أن أسماء سمات الأسماء لحقول الملفات المتعددة يجب أن تكون هي نفسها ، وفي العمل ، يجب استخدام الملف [] أو القائمة <file> لتلقيه.
أنا شخصياً أعتقد أن استخدام هذه الطريقة لتحميل ملفات متعددة ليس كذلك
جيد جدًا.
Struts2 لتنزيل الملف
يوفر Struts2 نوع نتيجة الدفق ، والذي يستخدم خصيصًا لدعم تنزيل الملفات. عند تحديد نوع نتيجة الدفق ، يجب تكوين معلمة inputName ، والتي تحدد دفق الإدخال ، وهو مدخل الملف الذي تم تنزيله (أي ، يمكن تنزيل الملف في دفق من خلال هذا الإدخال).
تنفيذ إجراء تنزيل الملف
تنفذ Class PlugedOwnloadAction الإجراء {// تم تحديد قيمة الخاصية هذه في ملف التكوين. سيتم حقن Struts2 تلقائيًا (أي تعيين قيمة). تحتاج إلى توفير أساليب Setter و Getter الخاصة الإدخال ؛ // حدد المسار الكامل للملف المراد تنزيله (اسم المسار + اسم الملف)/ * * يجب أن توفر فئة الإجراء التي تنفذ التنزيل طريقة لإرجاع مثيل inputstream. قيمة خاصية inputName المقابلة في <result ... // public inputstream getTargetFile () يلقي استثناء {return servletactionContext.getServletContext (). getResourCeasStream (inputPath) ؛ }. }}تكوين الإجراء المقابل في ملف struts.xml
<action name = "download"> <!-حدد موقع المورد الذي تم تنزيله-> <param name = "inputPath">/uploadfile/demo.txt </param> <!-قم بتكوين نوع النتيجة على أنه دفق-> name = "inputName"> TargetFile </param> <!-حدد طريقة التنزيل للملف الذي تم تنزيله واسم الملف المحفوظ في وقت التنزيل. يجب أن يحتوي اسم الملف عند حفظ الملف على امتداد ، ويشير الامتداد إلى أيقونة نوع التنزيل-> <param name = "contentDisposition"> filename = struts2
ما سبق هو الحلول الثلاثة لتنفيذ تحميل الملفات والتنزيل في Java المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!