تشترك هذه المقالة في الرموز المحددة لتحميل Javaweb Multi-File والتعبئة والتنزيل للتنزيل للرجوع إليها. المحتوى المحدد كما يلي
غالبًا ما يتم استخدام وظائف تحميل الملفات والتنزيل في المشاريع. تلخص هذه المقالة المشاهد في بيئة Javaweb ، وتحميل متعدد الملفات ووظائف التعبئة والتنزيل الدُفعات ، بما في ذلك مكتب الاستقبال وأجزاء الواجهة الخلفية.
بادئ ذي بدء ، دعونا نوضح:
لا يمكن تحديث الصفحة Ajax طلب Ajax ، ويمكن إرسال طلبات التنزيل والتحميل مباشرةً. يجب تنفيذ التحميل والتنزيل بناءً على طلب الصفحة بأكمله. يتم تحقيق هذه الوظيفة عمومًا عن طريق بناء أشكال النماذج في المشاريع.
1. تحميل ملفات متعددة
تتمثل متطلبات المشروع في إدراك وظيفة تحميل الصور المتعددة. بعد الإشارة إلى العديد من أساليب المكونات الموجودة على الإنترنت ، قررت اختيار حل تحميل jQuery الأصلي. اتبع الخطوات أدناه لنشر الكود المحدد.
1. جزء HTML (يمكن حذفه للبناء مع JS)
<form id = "uploadform" method = "post" enctype = "multipart/form-data"> <input type = "file" hidden name = "fileImage" multimage/> <a href = "javaScript: void (0) ؛" rel = "nofollow external" rel = "خارجي nofollow" id = "filesubmit" onClick = "UploadFileMulti ()"> تحميل المعلومات </a> </form>
هناك بعض التفسيرات:
1. enctype = "multipart/form-data" في الشكل
2. في المثال ، استخدم العلامات لبناء إرسال
2. JS جزء
var formData = new formData ($ ("#uploadform") [0]) ؛ formData.Append ("lovename" ، "datumlist") ؛ // قم بتعيين اسم المجلد الأصل formdata.append ("odercode" ، selforderCode) ؛ formData.append ("datumType" ، datumType) ؛ $. ajax ({type: "post" ، data: formdata ، url: "order/datumlist/batchinsertdatmlists" (result.success) {// محتوى ملف المربع $ ( خطأ: function () {datherRortoast ('فشل الطلب!')}}) ؛ هناك بعض التفسيرات أعلاه:
1. var formData = new formData ($ ("#uploadform") [0]) ؛
2. استخدم formdata.append ("OderCode" ، selforderCode) ؛ لإضافة معلمات أخرى
جافا الخلفية
multiparthttpservletrequest mrequest = (multiparthttpservletrequest) request ؛ list <multipartfile> files = mrequest.getFiles ("fileImage") ؛هناك بعض التفسيرات أعلاه:
1.
2. تحميل دفعة من الملفات
في هذا المشروع ، يكون الشرط هو تنزيل مجموعة من الملفات. استخدم ZIP لضغط الملف على الخادم ثم قم بتنزيل الملف على العميل.
للاستعلام عبر الإنترنت ، لا يمكن أن يؤدي استخدام فئة إخراج الملفات الخاصة بـ Java إلى حل مشكلة أسماء الملفات المشوهة في الملفات المضغوطة. الحل: استخدم حزمة ant.jar. عند إنشاء ملف مضغوط ، يمكنك تعيين تنسيق الترميز للملف ، وسيتم حل مشكلة أسماء الملفات المشوهة.
جزء HTML (يمكن حذفه للبناء مع JS)
<form id = "eploadform" method = "post" enctype = "multipart/form-data"> <div> <input type = "hidden" name = "ordercode"/> <input type = "hidden" name = "datumtype"/> <a href = "javaScript: void (0) ؛" rel = "nofollow external" rel = "خارجي nofollow" onClick = "BatchDatumListDownload ()"> batchdown </a> </viv> </form>
JS جزء
// batch download function batchDatumListDownload () {var param = {} ؛ param.datumtype = $ ("#datumTypeq"). val () ؛ if (param.datumtype == -1) {param.datumtype = null ؛ // Query all} param.orderCode = selforderCode ؛ $ ("#uploadform input [name = ordercode]"). val (param.orderCode) ؛ $ ("#uploadform input [name = datumType]"). val (param.datumtype) ؛ var form = $ ("#uploadform") [0] ؛ Form.Action = "Order/DatumList/BatchDownloadDatumList" ؛ form.method = "post" ؛ form.submit () ؛ // نموذج إرسال}الجزء الخلفي
patchdency patchdownloaddatumlist (DatumListVo datumListVo ، httpservletresponse) {try {// Query File List List <DatumListVo> volist = datumlistervice.querydatumlists (datumlistvo) ؛ // LECESS FILE LIST <IPER> files = new ArrayList <> () ؛ لـ (datumListVo: volist) {file file = file new (vo.getDatumurl ()) ؛ files.add (ملف) ؛ } string filename = datumListVo.getOrderCode () + "_" + datumListVo.getDatumType () + ".zip" ؛ // قم بإنشاء ملف مؤقت للتنزيل المعبأ على سلسلة Server Side GlobalupPath = "" ؛ String OsName = System.getProperty ("OS.NAME") ؛ if (osname.toLowerCase (). indexof ("windows")> = 0) {globaluploadpath = globalkeys.getString (globalkeys.windows_upload_path) ؛ } آخر if (osname.toLowerCase (). indexof ("linux")> = 0 || osname.tolowercase (). indexof ("mac")> = 0) {globaluppath = globalkeys.getString (globalkeys.linux_upload_path) ؛ } String outFilePath = globaluploadpath + file.separator + filename ؛ ملف الملف = ملف جديد (outFilePath) ؛ // File Futuption Dottle FileOutputStream OutStream = new FileOutputStream (file) ؛ // Compress Stream ZipoutputStream ToClient = new ZipoutputStream (OutStream) ؛ // قم بتعيين الحرف الترميز في الملف المضغوط ، وإلا فإنه سيصبح مشوهًا tooclient.setencoding ("GBK") ؛ ziputil.zipfile (ملفات ، tocclient) ؛ tooclient.close () ؛ Outstream.close () ؛ ziputil.downloadzip (ملف ، استجابة) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}من بينهم ziputil.java
/** * ملفات في قائمة الملفات المضغوطة * * param files * param outputStream * throws ioException */public static void zipfile (قائمة الملفات ، zipoutputstream outplaystream) يلقي ioException ، servleTexception {try {int size.size.size () ؛ // الملفات في القائمة المضغوطة لـ (int i = 0 ؛ i <size ؛ i ++) {file file = (file) files.get (i) ؛ حاول {zipfile (ملف ، outputStream) ؛ } catch (استثناء e) {متابعة ؛ }}} catch (استثناء e) {throw e ؛ }}/** * اكتب الملف إلى ملف zip * * param inputFile * param outputStream * athrows استثناء */public static void zipfile (file inputFile ، zipoutputStream outputStream) remowsivestream) FileInputStream (inputFile) ؛ BufferedInputStream binstream = جديد BufferEdInputStream (instream) ؛ Zipentry Entry = new zipentry (inputFile.getName ()) ؛ outputStream.putNextentry (الدخول) ؛ النهائي int max_byte = 10 * 1024 * 1024 ؛ // الحد الأقصى للتيار هو 10 أمتار طويلة treamtotal = 0 ؛ // قدرة دفق القبول int int = 0 ؛ // عدد التدفقات التي تحتاج إلى فصل int leepbyte = 0 ؛ // عدد الأحرف المتبقية في الملف بايت [] inoutbyte ؛ // Byte Array يقبل بيانات File StreamTotal = binstream.available () ؛ // يتم الحصول على الحد الأقصى لعدد الأحرف من الدفق من خلال الأسلوب المتاح SPERMNUM = (int) Math.Floor (StreamTotal /max_byte) ؛ . // بعد تقسيم الملف ، الرقم المتبقي if (spreamnum> 0) {for (int j = 0 ؛ j <spreamnum ؛ ++ j) {inoutbyte = new byte [max_byte] ؛ // اقرأ في الدفق وحفظه في صفيف البايت binstream.read (inoutbyte ، 0 ، max_byte) ؛ outputStream.write (inoutbyte ، 0 ، max_byte) ؛ // اكتب Dream}} // اكتب بيانات الدفق المتبقية inoutbyte = new byte [LEEPBYTE] ؛ Binstream.Read (inoutbyte ، 0 ، LeaftByte) ؛ outputStream.write (inoutbyte) ؛ outputStream.Closeentry () ؛ // يغلق إدخال zip الحالي ويوضع دفق لكتابة الإدخال التالي binstream.close () ؛ // close instream.close () ؛ }} آخر {رمي servleTexception جديد ("الملف غير موجود!") ؛ }} catch (ioException e) {throw e ؛ }}/** * قم بتنزيل الملف المعبأ * * param file * param response */public static void downloadzip (ملف الملف ، httpservletresponse response) {try {// قم بتنزيل الملف كدفق. BufferEdInputStream Fis = جديد BufferEdInputStream (FileInputStream جديد (file.getPath ())) ؛ byte [] buffer = new byte [fis.availival ()] ؛ Fis.Read (Buffer) ؛ fis.close () ؛ // استجابة استجابة واضحة. reset () ؛ outputStream TOCLIENT = جديد bufferedOutputStream (response.getOutputStream ()) ؛ استجابة. استجابة. toClient.write (العازلة) ؛ tooclient.flush () ؛ tooclient.close () ؛ file.delete () ؛ // حذف الملف الذي تم إنشاؤه من جانب الخادم} catch (ioException ex) {ex.printStackTrace () ؛ }} ما سبق يفي بشكل أساسي بمتطلبات تحميل الملفات وتنزيلها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.