استخدام ملف الويب يستخدم المنشور. على عكس النماذج النشر ، يتطلب تحميل الملفات إعداد سمة enctype للنموذج إلى multipart/form-data. نظرًا لأن الملفات التي تم تحميلها ستكون كبيرة نسبيًا ، يجب تعيين هذه المعلمة لتحديد أن المتصفح يستخدم التحميل الثنائي. إذا لم يتم تعيينه ، فإن خاصية enctype تتخلف عن تطبيق Application/x-www-form-urlencoded. سيستخدم استخدام المستعرض ASCII لإرسال البيانات إلى الخادم ، مما يؤدي إلى الفشل في إرسال الملف.
لتحميل ملف ، استخدم مجال الملف (<إدخال type = 'file'/> وتعيين enctype للنموذج على multipart/form-data.
يتم عرض صفحة تحميل العميل في الشكل:
الرمز كما يلي:
تحميل. html
<! doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <title> upload file </title> <meta http-equiv = "keywords" content = "keyword1 ، keyword2 ، keybord3" http-equiv = "content-type" content = "text/html ؛ charset = utf-8"> <link rel = "stylesheet" type = "text/css" href = "css/style.css"> </head> align = "center"> <br/> <bieldset> <legend> ملف التحميل </legend> <br/> <div class = 'line'> <div align = 'left'> upload file 1 </viv> <div align = 'left'> <input type = "file" name = "file1" ALING = 'LEFT'> تحميل ملف التحميل 2 </div> <div align = 'left'> align = 'left'> <input type = "file" name = "file2"> </viv> </viv> <div class = 'line'> <div align = 'left' <div align = 'left'> upload file description 2 </viv> <div align = 'left'> <input type = "text" name = "description2"> </viv> </viv> <div class = 'line'> <div align = 'left'> upload description 2 </viv> <div align = "left '</div> </viv> </viv> </fieldset> </viv> </pong> </body> </html>
الرمز الذي يديره العميل بسيط للغاية ، والخادم أكثر تعقيدًا. للحصول على المحتويات ، يجب تحليل الطلب المقدم من المستعرض وفقًا للتنسيق المحدد بواسطة بروتوكول HTTP.
إنه أكثر إثارة للقلق لتحليل التدفقات الثنائية. العديد من مكتبات الفصل قد أكملت هذا العمل بالفعل. على سبيل المثال ، Smartupload و Apache Commons fileupload.smartupload هي مكتبة فئة تجارية. يتم تخزين البيانات في الذاكرة أثناء تحليل عملية الطلب ، بحيث تكون أسرع ، لكن تدفق الذاكرة يحدث عند تحميل ملفات أكبر. Apache Commons FileUpload هي مكتبة فئة مجانية ومفتوحة المصدر. تدمج بعض الأطر مثل الدعامات مكتبة فئة Apache Common FileUpload لتنفيذ تحميلات الملفات.
كما هو مبين في الشكل:
الرمز كما يلي:
package com.helloweenvsfei.servlet ؛ import java.io javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد Org.Ommons.Ommons.FileDikploAd.diskpload.diskfikpload.disk. org.apache.commons.fileupload.fileItem ؛ import org.apache.commons.fileupload.fileuploadexception ؛ فئة التحميل العام يمتد httpservlet {private static static final long serialversionuid = 7523024721833332088l ؛ DOGED void public (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {reponse.setcharacterencoding ("UTF-8") ؛ Response.getWriter (). println ("يرجى تحميل الملف في post") ؛ } suppressWarnings ("Unchecked") public void dopost (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {file11 = null ، file2 = null ؛ سلسلة الوصف 1 = null ، description2 = null ؛ استجابة. setcharacterencoding ("UTF-8") ؛ استجابة. printWriter out = response.getWriter () ؛ out.println ("<! doctype html public/"-// w3c // dtd html 4.01 Transitional // en/">") ؛ out.println ("<html>") ؛ Out.println ("<head> <title> servlet </title> </head>") ؛ out.println ("<link rel = 'stylesheet' type = 'text/css' href = '../css/style.css'>") ؛ out.println ("<body>") ؛ out.println ("<div align = center> <br/>") ؛ out.println ("<fieldset style = 'width: 90 ٪'> <legend> upload file </legend> <br/>") ؛ out.println ("<div class = 'line'>") ؛ out.println ("<div align = 'left' class = 'leftDiv'> log log: </viv>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ // استخدم كائن diskfileupload لتحليل طلب diskfileupload diskfileUpload = new diskfileupload () ؛ جرب {// ضع النتيجة المستخلفة في قائمة قائمة <FileItem> = diskfileUpload.parserequest (request) ؛ Out.println ("تتبع من خلال جميع fileItems ... <br/>") ؛ // تتبع من خلال قائمة جميع fileItems في fileItem fileItem: list) {if (fileItem.isformfield ()) {// إذا كان حقل نصًا إذا ("description1" .equals (fileItem.getFieldName ()))) الوصف 1 = سلسلة جديدة (fileItem.getString (). getBytes () ، "UTF-8") ؛ } if ("description2" .equals (fileItem.getFieldName ())) {// إذا كان fileItem هو الاسم هو الوصف 2 out.println ("السفر إلى الوصف 2 ... <br/>") ؛ الوصف 2 = سلسلة جديدة (fileItem.getString (). getBytes () ، "UTF-8") ؛ }} آخر {// خلاف ذلك ، لحقل الملف if ("file1" .equals (fileItem.getFieldName ())) {// file object build by the path file client file remotefile = new file (new string (fileItem.getName (). getBytes () ، "utf-8")) ؛ Out.println ("السفر إلى file1 ... <br/>") ؛ out.println ("موقع العميل موقع:" + remotefile.getabsolutepath () + "<br/>") ؛ // ملف من جانب الخادم ، ضع في ملف تحميل File1 = ملف جديد (this.getServletContext (). file1.getParentFile (). mkdirs () ؛ file1.createNewFile () ؛ // اكتب ملفًا واكتب محتوى الملف الخاص بـ fileItem في ملف inputStream ins = fileItem.getInputStream () ؛ OutputStream OUS = fileOutputStream جديد (file1) ؛ حاول {byte [] buffer = new byte [1024] ؛ int len = 0 ؛ بينما ((len = ins.read (buffer))> -1) ous.write (buffer ، 0 ، len) ؛ Out.println ("حفظ الملف" + file1.getabsolutepath () + "<br/>") ؛ } أخيرًا {ous.close () ؛ ins.close () ؛ }} if ("file2" .equals (fileItem.getFieldName ())) {// ملف كائن ملف بواسطة ملف ملف العميل RemoteFile = new file (new string (fileItem.getName (). getBytes () ، "UTF-8")) ؛ Out.println ("السفر إلى file2 ... <br/>") ؛ out.println ("موقع العميل موقع:" + remotefile.getabsolutepath () + "<br/>") ؛ // ملف من جانب الخادم ، وضعه في ملف تحميل File2 = ملف جديد (this.getServletContext (). file2.getParentFile (). mkdirs () ؛ file2.createNewFile () ؛ // اكتب ملفًا واكتب محتويات الملف لـ fileItem إلى ملف inputStream ins = fileItem.getInputStream () ؛ OutputStream OUS = FileOutputStream جديد (file2) ؛ حاول {byte [] buffer = new byte [1024] ؛ int len = 0 ؛ بينما ((len = ins.read (buffer))> -1) ous.write (buffer ، 0 ، len) ؛ Out.println ("حفظ الملف" + file2.getabsolutepath () + "<br/>") ؛ } أخيرًا {ous.close () ؛ ins.close () ؛ }}}} out.println ("تم الانتهاء من تحليل الطلب") ؛ } catch (fileUploadexception e) {// todo catch catch e.printstacktrace () ؛ } out.println ("</div>") ؛ out.println ("<div align = 'left' class = 'leftDiv'> file1: </viv>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ out.println ("<a href = '" + request.getContextPath () + "/antainment/" + file1.getName () + "' target = _blank>" + file1.getName () + "</a>") ؛ out.println ("</div>") ؛ out.println ("</div>") ؛ } if (file2! = null) {out.println ("<div class = 'line'>") ؛ out.println ("<div align = 'left' class = 'leftDiv'> file2: </viv>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ out.println ("<a href = '" + request.getContextPath () + "/antainment/" + urlencoder.encode (file2.getName () ، "utf-8") + "target = _blank>" + file2.getName () + "</a>) ؛ out.println ("</div>") ؛ out.println ("</div>") ؛ } out.println ("<div class = 'line'>") ؛ out.println ("<div align = 'left' class = 'leftDiv'> description1: </div>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ out.println ("<div align = 'left' class = 'leftDiv'> الوصف 2: </div>") ؛ out.println ("<div align = 'left' class = 'rightDiv'>") ؛ Out.println (الوصف 2) ؛ out.println ("</div>") ؛ out.println ("</div>") ؛ out.println ("</fieldset> </viv>") ؛ Out.println ("</body>") ؛ out.println ("</html>") ؛ out.flush () ؛ out.close () ؛ }}يظهر تأثير تشغيل البرنامج في الشكل:
تم تجميع هذه المقالة في "ملخص لتقنيات تشغيل Java Upload" ، وكل شخص مرحب به للتعلم والقراءة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.