تشترك الأمثلة الواردة في هذه المقالة في تحميل الملف وتنزيل رمز تنفيذ Java للرجوع إليه. المحتوى المحدد كما يلي
مكتب الاستقبال:
1. طريقة التقديم: بعد
2. هناك عناصر نموذج تم تحميل ملف في النموذج: <إدخال type = "file" />
3. حدد نوع النموذج:
النوع الافتراضي: enctype = "application/x-www-form-urlencoded"
نوع تحميل الملف: multipart/form-data
fileUpload
يتم استخدامه بشكل شائع في تطوير وظيفة تحميل الملف ، كما يوفر Apache مكونات تحميل الملف!
مكون FileUpload:
1. قم بتنزيل رمز المصدر
2. تقديم ملفات جرة في المشروع
commons-filepload -1.2.1.jar [حزمة jar core تحميل الملف]]
Commons-IO-1.4.JAR [فئات الأدوات ذات الصلة بالتطريز لمعالجة الملفات]
يستخدم:
يمتد فئة exploadservlet من الفئة العامة httpservlet {// upload directory ، احفظ الموارد التي تم تحميلها من الفراغ العام void doget (httpservletrequest request ، httpservletresponse repress) المصنع = جديد diskfileItemFactory () ؛ // 2. قم بإنشاء تحميل ملف Core Tool Class ServletFilePload Upload = جديد servletfileupload (المصنع) ؛ // 1. اضبط الحد الأقصى المسموح به لملف واحد: 30M Upload.setFilesizEmax (30*1024*1024) ؛ // 2. اضبط الحجم الإجمالي المسموح به لنموذج تحميل الملف: 80M Upload.SetSizeMax (80*1024*1024) ؛ // 3. اضبط ترميز اسم ملف نموذج التحميل // يعادل: request.setcharacterencoding ("UTF-8") ؛ تحميل. // 3. تحديد: ما إذا كان النموذج الحالي هو نموذج تحميل الملف إذا (upload.ismultipartContent (request)) {// 4. تحويل البيانات المطلوبة إلى كائنات fileItem ، ثم تغلف قائمة <Ibuitem> list = upload.parserequest (request) ؛ // traversal: احصل على كل بيانات تم تحميلها لـ (fileItem item: list) {// الحكم: بيانات نصية عادية if (item.isformfield ()) {// normal text data string fieldName = item.getfieldName () ؛ // form element name string content = item.getString () ؛ // اسم عنصر النموذج ، البيانات المقابلة //item.getString("utf-8 ") ؛ حدد نظام الترميز. }. // نموذج اسم عنصر السلسلة = item.getName () ؛ // file name string content = item.getString () ؛ // اسم عنصر النموذج ، نوع سلسلة البيانات المقابلة = item.getContentType () ؛ // نوع الملف inputStream في = item.getInputStream () ؛ // تحميل دفق الملف/** 4. اسم الملف هو إعادة تسمية* لمستخدمي مختلف المستخدمين readme.txt ، لا تريد الكتابة فوق! * معالجة الخلفية: أضف علامة فريدة للمستخدم! */// أ. قم بإنشاء معرف سلسلة علامات فريد بشكل عشوائي = uuid.randomuuid (). toString () ؛ // ب. لصق اسم الملف = id + "#" + name ؛ // احصل على مسار سلسلة تحميل قاعدة التحميل = getServletContext (). getRealPath ("/expload") ؛ // إنشاء ملف ملف ملف الهدف = ملف جديد (المسار ، الاسم) ؛ // فئة الأدوات ، تحميل الملف item.write (ملف) ؛ item.delete () ؛ // حذف الملف المؤقت الذي تم إنشاؤه بواسطة system.out.println () ؛ }}} آخر {system.out.println ("النموذج الحالي ليس نموذج تحميل ملف ، فشل المعالجة!") ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }} // التنفيذ اليدوي لعملية تحميل الفراغ الخاص (طلب httpservletrequest) يلقي ioException ، UnsupportedEncodingException { /* request.getParameter ("") ؛ // get/post request.getquerystring () ؛ // الحصول على البيانات المقدمة عن طريق get request.getInputStream () ؛ // احصل على البيانات المقدمة بواسطة post*//**************** الحصول على بيانات نموذج تحميل الملف يدويًا ***********//1. الحصول على نموذج دفق البيانات inputStream في = request.getInputStream () ؛ // 2. تحويل الدفق inputStreamReader instream = new inputStreamReader (في ، "utf-8") ؛ // 3. BufferedReader Reader = جديد BufferedReader (instream) ؛ // الإخراج سلسلة بيانات str = null ؛ بينما ((str = reader.readline ())! = null) {system.out.println (str) ؛ } // سلسلة بيانات الإخراج str = null ؛ بينما ((str = reader.readline ())! = null) {system.out.println (str) ؛ } // close reader.close () ؛ instream.close () ؛ in.close () ؛ } public void dopost (httpservletrequest request ، httpservletponse response) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }}قضية:
index.jsp
<Body> <a href = "$ {pagecontext.request.contextpath} /upload.jsp"> تحميل الملف </a>تحميل. jsp
<Body> <form name = "frm_test" Action = "$ {pagecontext.request.contextpath}/fileservlet؟ <type type = "file" name = "file_img"> <br/> <إدخال type = "إرسال" value = "submit"> </form> </body>fileservlet.java
/** * التعامل مع تحميل الملف وتنزيله * Author jie.yuan * */public class fileservlet يمتد httpservlet {public void dogge (httpservletrequest request ، httpservletsponse ressponse) rewors servlexception ، ioException {// get request parameters: requiughiure request methode = request.get.get. if ("تحميل" .equals (الطريقة)) {// تحميل تحميل (طلب ، استجابة) ؛ } if if ("downlist" .equals (method)) {// أدخل قائمة Downlist Downlist (طلب ، استجابة) ؛ } آخر إذا ("Down" .equals (method)) {// download down (request ، response) ؛ }} / ** * 1. تحميل * / تحميل باطل خاص (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {try {// // 2. تحميل الملفات Core Tool Class ServletFilePload Upload = new ServletFileUpload (Factory) ؛ . // حد حجم الملف المفرد expload.setsizemax (50*1024*1024) ؛ // إجمالي حجم الملف limt.setheaderencoding ("UTF-8") ؛ // معالجة ملفات الملفات الصينية // ugge if (epload.ismultipartcontent (request)) {// 3. تحويل بيانات الطلب إلى قائمة قائمة التجميع <IpiTeM> قائمة = upload.parserequest (طلب) ؛ // traversal for (fileItem item: list) {// justice: data text normal if (item.isformfield ()) {// get the name string name = item.getFieldName () ؛ // احصل على قيمة سلسلة القيمة = item.getString () ؛ System.out.println (value) ؛ }. احصل على اسم سلسلة اسم الملف = item.getName () ؛ // --- تعامل مع مشكلة تحميل اسم الملف المكررة ---- // A1. احصل على معرف mark الفريد = uuid.randomuuid (). toString () ؛ // A2. اسم ملف اسم ملف = id + "#" + name ؛ // ب. احصل على سلسلة التحميل BASEPATH = getServletContext (). getRealPath ("/topload") ؛ // ج. قم بإنشاء كائن الملف ليتم تحميل ملف ملف = ملف جديد (BasePath ، name) ؛ // د. تحميل item.write (ملف) ؛ item.delete () ؛ // حذف الملف المؤقت الذي تم إنشاؤه عند تشغيل المكون}}}}} catch (استثناء E) {E.PrintStackTrace () ؛ }} / *** 2. القفز إلى قائمة Down.jsp لعرض // 1. تهيئة خريطة مجموعة الخريطة <اسم الملف الذي يحتوي على علامات فريدة ، اسم الملف القصير> ؛ خريطة <string ، string> filenames = new hashmap <string ، string> () ؛ // 2. احصل على دليل التحميل وأسماء الملفات لجميع الملفات ضمن سلسلة BathPath = getServletContext (). getRealPath ("/upload") ؛ // ملف ملف الدليل = ملف جديد (BathPath) ؛ // في الدليل ، جميع قائمة سلسلة أسماء الملفات [] = file.list () ؛ // traversal ، تغليف إذا (list! = null && list.length> 0) {for (int i = 0 ؛ i <list.length ؛ i ++) {// full name string filename = list [i] ؛ // string name string ShortName = filename.substring (filename.lastindexof ("#")+1) ؛ // تغليف أسماء الملفات. }} // 3. حفظ لطلب طلب المجال. // 4. } / *** 3. التعامل مع تحميل* / private void لأسفل (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {// احصل على اسم الملف الذي تم تنزيله بواسطة المستخدم (إلحاق بيانات بعد عنوان url ، get) filename = request.getParameter ("filename") ؛ filename = سلسلة جديدة (filename.getBytes ("ISO8859-1") ، "UTF-8") ؛ // الحصول على سلسلة تحميل سلسلة مسار BASEPATH = getServletContext (). getRealPath ("/expload") ؛ // احصل على دفق ملف inputStream في = جديد fileInputStream (ملف جديد (BasePath ، filename)) ؛ // إذا كان اسم الملف صينيًا ، فيجب تنفيذ ترميز عنوان URL = urlencoder.encode (اسم الملف ، "UTF-8") ؛ // قم بتعيين رأس الاستجابة للتنزيل استجابة. // الحصول على استجابة بايت دفق OutputStream Out = response.getOutputStream () ؛ بايت [] ب = بايت جديد [1024] ؛ int len = -1 ؛ بينما ((len = in.read (b))! = -1) {out.write (b ، 0 ، len) ؛ } // close out.close () ؛ in.close () ؛ } public void dopost (httpservletrequest request ، httpservletponse response) يلقي servletexception ، ioException {this.doget (request ، response) ؛ }}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.