هنا أستخدم الملفات غير المتزامنة القائمة على Servlet. لا أقول الكثير من الهراء وأحمل الرمز. . .
package com.future.zfs.util ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد java.io.printwriter ؛ استيراد java.util.iterator ؛ import java.util javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpservletrespons org.apache.commons.fileupload.fileuploadbase.sizeLimitexceedEdException ؛ import org.apache.commons.fileupload.disk.diskfileItemFactory ؛ serial org.acommons.fileupload.servled يمتد FileUploAdServlet httpservlet {Final Long Max_size = 10 * 1024 * 1024 ؛ // قم بتعيين الحد الأقصى للملف المحمّل إلى 10m // قائمة تنسيقات الملف المسموح به لتحميل السلسلة النهائية [] lefttype = new string [] {"jpg" ، "jpeg" ، "gif" ، "txt" ، "doc" ، "docx" ، "mp3" ، "wma" ، "m4a" ، "XLS"} ؛ fileUploadServlet () {super () ؛ } public void dorder () {super.destroy () ؛ } Override Service Void Service (طلب httpservletrequest ، استجابة httpservletresponse) يلقي ServleTexception ، ioException {response.setContentType ("text/html") ؛ // قم بتعيين الحرف الترميز على UTF-8 ، بحيث يعرض الأحرف الصينية. setcharacterencoding ("UTF-8") ؛ . dfif.SetSizethReshold (4096) ؛ // قم بتعيين حجم الذاكرة المستخدمة لتخزين الملفات مؤقتًا عند تحميل الملفات ، وهنا 4K. أكثر من الجزء سيكون موجودًا مؤقتًا في القرص الثابت DFIF.SetRepository (ملف جديد (request.getRealPath ("/") + "UploadTemp")) servletfileupload (DFIF) ؛ // قم بتعيين الحد الأقصى لحجم التحميل sfu.setsizemax (max_size) ؛ printWriter out = response.getWriter () ؛ // احصل على قائمة بجميع حقول التحميل من قائمة الطلبات = null ؛ حاول {fileList = sfu.parserequest (request) ؛ } catch (fileuploadexception e) {// معالجة حجم الملف استثناءً كبيرًا جدًا (e extuteof sizelimitexedexception) {out.println ("{message: 'حجم الملف يتجاوز الحجم المحدد:"+max_size+"byte'}") ؛ يعود؛ } E.PrintStackTrace () ؛ } // لا يوجد تحميل ملف if (fileList == null || fileList.size () == 0) {out.println ("{message:" الرجاء تحديد ملف التحميل '} ") ؛ يعود؛ } // الحصول على جميع الملفات التي تم تحميلها iterator fileitr = fileList.iterator () ؛ // loop جميع الملفات بينما (fileitr.hasnext ()) {fileItem fileItem = null ؛ مسار السلسلة = فارغ ؛ حجم طويل = 0 ؛ // الحصول على الملف الحالي fileItem = (fileItem) fileitr.next () ؛ // تجاهل حقل النموذج البسيط بدلاً من مجال الملف للمجال الذي تم تحميله (<إدخال نوع = "text" /> ، إلخ) إذا (fileItem == null || fileItem.isformfield ()) {متابعة ؛ } // احصل على المسار الكامل لمسار الملف = fileItem.getName () ؛ // احصل على حجم الملف = fileitem.getSize () ؛ if (". يعود؛ } // احصل على اسم الملف لسلسلة المسار التي تمت إزالتها t_name = path.substring (path.lastindexof ("//") + 1) ؛ // احصل على امتداد الملف (سيتم الحصول على الاسم الكامل بدون تمديد) سلسلة t_ext = t_name.substring (t_name.lastindexof (".") + 1) ؛ // رفض نوع الملف خارج تنسيق الملف المحدد int lethflag = 0 ؛ int المسموح به extext لـ (؛ allowflag <electedExtCount ؛ allowflag ++) {if (allowtype [allowflag] .equals (t_ext)) break ؛ } if (allowflag == المسموح بها) {string message = "" ؛ من أجل (lemtflag = 0 ؛ allowflag <showtextcount ؛ allowflag ++) {message+= "*." + allowtype [allowflag] + "" ؛ } out.println ("{message: 'يرجى تحميل النوع التالي من الملف"+message+"'}") ؛ يعود؛ } طويلًا الآن = system.currentTimeMillis () ؛ // قم بإنشاء اسم الملف المحفوظ بعد التحميل وفقًا لسلسلة وقت النظام = string.valueof (الآن) ؛ . + t_ext ؛ // مسار اسم الملف الأصلي = request.getRealPath ("/") + "تحميل/" + مسار ؛ حاول {// حفظ fileitem.write (ملف جديد (مسار)) ؛ استجابة. setstatus (200) ؛ out.println ("{message:/" upload بنجاح. تم حفظه على النحو التالي: " + prefix +". } catch (استثناء e) {E.PrintStackTrace () ؛ }}}} web.xml
<Sradlet> <Sradlet-Name> fileUploadServlet </rectlet-name> <Srevlet-class> com.future.zfs.util.fileuploadservlet </rectlet-class> </radlet> <ustlet-mapping> <servlet-name> fileuploadservlet </servlet-name> <Url-pattern> </servlet mapping>
صفحة التحميل
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv = "content-type" content = "text/html ؛ charset = utf-8"> <title> insert the type </title> script = src = "js/jquery.js"> </script> <script type = "text/javaScript" src = "js/ajaxfileupload.js"> </script> <script type = "text/javaScript"> function ajaxfilepload () {$ ( $ (هذا) .show () ؛ false fileElementId: 'file' ، // سمة المعرف لمساحة تحميل الملف <type type = "file" id = "file" name = "file"/> datatype: 'json' ، // يتم تعيين نوع قيمة الإرجاع عمومًا على نجاح json: الدالة (البيانات ، الحالة) // الخادم يستجيب بنجاح إلى وظيفة المعالجة {//alert(data.mess matterian $ ('#myspan') محددة في Struts2. if (typeof (data.error)! = 'undefined') {if (data.error! = '') {//alert(data.error) ؛ $ ('#myspan'). html (data.message) ؛ } آخر {//alert(data.message) ؛ $ ('#myspan'). html (data.message) ؛ }}} ، خطأ: الدالة (البيانات ، الحالة ، e) // failure failling failly fannling server {// ALERT (e) ؛ $ ('#myspan'). html (e) ؛ }}) إرجاع خطأ ؛ } </script> </head> <body> <img src = "images/loading.gif" id = "loading" style = "display: none ؛"> <span style = "color: red ؛" id = "myspan"> </span> <br/> <input type = "file" id = "file" name = "file"/> <br/> <input type = "button" value = "upload" onClick = "return ajaxfileudaD () </body> </html> تجدر الإشارة إلى أنه عند استخدام AjaxFileUpload للتحميل بناءً على Servlet ، تحتاج إلى تعيين reponse.setContentType ("Text/HTML") ؛ على الرغم من أن نوع البيانات: "JSON" تم تعيينه على JSON ، إلا أنك لا تزال بحاجة إلى تعيين Response.setContentType ("Text/HTML") ؛ خلاف ذلك ، لا يمكن الحصول على البيانات التي يتم إرجاعها بواسطة الخادم وسيظهر مربع حوار.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.