بشكل عام ، عند استخدام Servlet لمعالجة عناصر النماذج ، تكون عناصر النماذج كلها نصًا بسيطًا ، ويسهل معالجة Servlets باستخدام request.getParameter (). ولكن عندما يحتوي النموذج على أكثر من مجرد نص بسيط ، مثل تحميل حقول الملفات ، فإنه لا يزال مهمة معقدة للغاية لتحليل كل جزء فرعي من النموذج المركب مباشرة من كائن httpservletrequest.
من أجل تبسيط معالجة بيانات نوع "multipart/form-data" ، يمكن استخدام المكونات المقابلة للمعالجة ، والتي يمكن أن توفر الكثير من الترميز ، ودعم إعادة الاستخدام ، وهي أيضًا فعالة للغاية.
هناك أيضًا بعض مكونات Java: FileUpload ، SmartUpload ، COS ، إلخ
لاستخدام FileUpload ، يجب عليك أولاً تنزيل المكون المقابل:
1. حزمة FileUpload: http://commons.apache.org/fileupload/
2. حزمة: http://commons.apache.org/io/
بعد التنزيل ، قم بإلغاء ضغط حزمة zip ونسخ المشاع--1.2.1.Jar و Commons-IO-1.4.Jar إلى Tomcat's WebApp/Web-INF/LIB.
1. صفحة النموذج (لتحديد enctype = "multipart/form -data" من النموذج) - expload.html
<html> <head> <title> تحميل </title> </head> <body> <body> <name = "eploadform" method = "post" enctype = "multipart/form-data" action = "upload"> <table> <td> <td> <td align = "right" name: </tiv> <td> </td> </tr> <tr> <td> <div align = "right"> تحميل ملف 1: </div> </td> <td> <type type = "file" name = "file1" size = "30"/> </td> </td> <tr> <td> <td> <tr div align = "right". name = "file2" size = "30"/> </td> </tr> <tr> <td> <td> <pection type = "submit" name = "pridt" value = "expload"> </td> <td> <type type = "reset" name = "reset" value = "reset">
2. نموذج معالجة Servlet - ToploadServlet
حزمة mypack ؛ استيراد javax.servlet.*؛ استيراد javax.servlet.http.*؛ استيراد java.io.*؛ استيراد java.util. org.apache.commons.fileupload.disk.*؛ الطبقة العامة exploadServlet يمتد httpservlet {private string filepath ؛ // الدليل حيث يتم تحميل الملفات الخاصة بالسلسلة الخاصة TempFilePath ؛ // الدليل حيث يتم تخزين الملفات المؤقتة باطلة عامة init (servletConfig config) يلقي servleTexception {super.init (config) ؛ FilePath = config.getInitParameter ("filepath") ؛ TempFilePath = config.getInitParameter ("tempfilepath") ؛ filePath = getServletContext (). getRealPath (filePath) ؛ TempFilePath = getServletContext (). getRealPath (tempfilePath) ؛ } public void dopost (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {response.setContentType ("text/plain") ؛ // إرسال هيئة الاستجابة إلى العميل printwriter outNet = response.getWriter () ؛ حاول {// إنشاء مصنع FileItem FileItem المستند إلى القرص الصلب DiskfileItemFactory Factory = New DiskfileItemFactory () ؛ // قم بتعيين حجم المخزن المؤقت المستخدم لكتابة البيانات إلى القرص الثابت ، إليك 4K Factory.SetSizeSethReshold (4*1024) ؛ // قم بتعيين دليل الدليل المؤقت. // قم بإنشاء معالج تحميل الملف servletfileupload upload = new ServleTfileUpload (Factory) ؛ // قم بتعيين الحد الأقصى لحجم الملف المسموح به لتحميله ، فإليك 4 أمتار تحميل. setsizemax (4*1024*1024) ؛ list / * fileItem * / items = upload.parserequest (request) ؛ iterator iter = items.iterator () ؛ بينما (iter.hasnext ()) {fileItem item = (fileItem) iter.next () ؛ if (item.isformfield ()) {processFormField (item ، outNet) ؛ // التعامل مع حقول النماذج العادية} آخر {processuploadedfile (العنصر ، outNet) ؛ // التعامل مع ملفات تحميل}} outnet.close () ؛ } catch (استثناء e) {رمي servleTexception (e) ؛ }} private void processFormField (fileItem item ، printWriter OutNet) {string name = item.getFieldName () ؛ قيمة السلسلة = item.getString () ؛ OutNet.println (name+":"+value+"/r/n") ؛ } Private void processUploadedFile (pileitem item ، printWriter OutNet) يلقي استثناء {string filename = item.getName () ؛ int index = filename.lastindexof ("//") ؛ filename = filename.subString (index+1 ، filename.length ()) ؛ ملفات طويلة = item.getSize () ؛ if (filename.equals ("") && filesize == 0) return ؛ الملف exploadedfile = ملف جديد (filepath+"/"+اسم الملف) ؛ item.write (toploadedfile) ؛ OutNet.println (تم حفظ اسم الملف+".) ؛ OutNet.println ("حجم"+filename+"هو"+filesize+"/r/n") ؛ }} تم تكوين Servlet في web.xml على النحو التالي:
<Sradlet> <Sradlet-Name> تحميل </servlet-name> <Verlet-Class> mypack.uploadservlet </rectlet-class> <Ing-param> <param-name> filepath </param-name> <Param-value> store </param-value> <Param-value> temp </parm-value> </ith-param> </isherlet> <servlet-mapping> <sterled-name> تحميل </servlet-name> <Url-pattern>/تحميل </url-pattern> </rectlet-mapping>
في هذه المرحلة ، تم إكمال وظيفة تحميل الملف البسيطة - الوصول إلى صفحة النموذج ، حدد الملف وانقر فوق تحميل الملف. إذا كنت ترغب في حفظ الملف في قاعدة البيانات أثناء تحميل الملف على الخادم ، فيمكنك حفظ اسم الملف في قاعدة البيانات بعد الحصول على اسم الملف ، بحيث يمكنك تحديد ملف المستخدم وفقًا لاسم الملف في المستقبل!
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.