تحميل الملفات شائع جدًا في تطبيقات الويب. من السهل جدًا تطبيق وظيفة تحميل الملفات في بيئة الويب Java ، لأنه يوجد بالفعل العديد من المكونات التي تم تطويرها في Java لتحميل الملفات على الإنترنت. تستخدم هذه المقالة مكون المشاع الأكثر شهرة كمثال لإظهار كيفية إضافة وظيفة تحميل الملف إلى تطبيقات الويب Java.
يعد مكون Commons-FilePload أحد المشاريع المصدر المفتوحة لـ Apache ويمكن تنزيله من http://commons.apache.org/fileupload/. هذا المكون بسيط وسهل الاستخدام ، مما يتيح لك تحميل ملف واحد أو أكثر في وقت واحد ويمكن أن يحد من حجم الملف.
بعد التنزيل ، قم بفك ضغط حزمة zip ونسخ المشاع-filepload -1.x.jar إلى WebApps من Tomcat/WebApp/Web-Inf/lib/. إذا كان الدليل غير موجود ، فيرجى إنشاء الدليل الخاص بك.
قم بإنشاء أداة تحميل جديدة
package com.liaoxuefeng.web ؛ فئة عامة fileUploadServlet تمتد httpservlet {private string eploaddir = "c: // temp" ؛ Override void dopost (httpservletrequest req ، httpservletresponse resp) يلقي servletexception ، ioException {// todo:}}عندما يتلقى Servlet طلب POST الصادر عن المتصفح ، فإنه ينفذ تحميل الملف في طريقة DOPOST (). نحن بحاجة إلى اجتياز fileItemIterator والحصول على كل fileItemStream:
OverRideProtected void dopost (httpservletrequest req ، httpservletresponse resp) يلقي servletexception ، ioException {try {servletfileupload upload = new servletfileupload () ؛ // SET MAX FILE SIZE إلى 1 MB: UPLOAD.SETFILESIZEMAX (1024 * 1024) ؛ fileItemIterator it = upload.getItemIterator (req) ؛ // التعامل مع كل ملف: بينما (it.hasnext ()) {fileItemStream item = it.next () ؛ if (! item.isformfield ()) {// إنه تحميل ملف: GEALLEFILEITEM (item) ؛ }} req.getRequestDispatcher ("success.jsp"). إلى الأمام (req ، resp) ؛ } catch (fileUploadexception e) {رمي servleTexception جديد ("لا يمكن تحميل الملف." ، e) ؛ }}اقرأ دفق الإدخال للملفات التي تم تحميلها في طريقة HandlefileItem () ، ثم اكتبها إلى uploaddir ، ويتم إنشاء اسم الملف بشكل عشوائي بواسطة UUID:
void GealthFileItem (pileitemstream item) يلقي ioException {system.out.println ("تحميل ملف:" + item.getName ()) ؛ ملف newUploAdfile = ملف جديد (UploadDir + "/" + uuid.randomuuid (). toString ()) ؛ Byte [] Buffer = New Byte [4096] ؛ إدخال inputStream = فارغ ؛ OutputStream Output = null ؛ حاول {input = item.OpenStream () ؛ الإخراج = جديد bufferedOutputStream (FileOutputStream جديد (newUploadfile)) ؛ لـ (؛؛) {int n = input.read (buffer) ؛ إذا (n == (-1)) كسر ؛ output.write (Buffer ، 0 ، n) ؛ }} أخيرًا {if (input! = null) {try {input.close () ؛ } catch (ioException e) {}}}إذا كنت ترغب في قراءة مجلد التحميل المحدد في ملف تكوين web.xml ، فيمكنك تهيئته بطريقة init ():
Overridepublic void init (servletconfig config) يلقي servleTexception {super.init (config) ؛ this.uploaddir = config.getInitParameter ("dir") ؛}أخيرًا ، قم بتكوين servlet في web.xml:
<؟ <Servlet-name> ToploadServlet </servlet-name> <Servlet-class> com.liaoxuefeng.web.fileuploadservlet </servlet-class> </qervlet> <cervlet-mapping> <verlet-name> exploadservlet </servlet-name>/upitrn> url.
بعد تكوين Servlet ، ابدأ Tomcat أو Resin واكتب اختبار INDEX.HTM بسيط:
<html> <body> <p> fileUploadServlet Demo </p> <form name = "form1" Action = "Upload" method = "post" enctype = "multipart/form-data"> <input type = "file" name = "file"/>
لاحظ أن Action = "تحميل" يحدد عنوان URL رسم الخرائط الخاص بـ fileUploadServlet الذي يتولى الملفات التي تم تحميلها.
عندما يكون التحميل ناجحًا ، يتم عرض Success.JSP ، وإلا ، يتم طرح استثناء. إذا كان حجم الملف الذي تم تحميله يتجاوز 1 ميغابايت ، فسوف نحصل على ملفات filtizeLimitexentedException.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.