تشارك هذه المقالة رمزًا محددًا لملفات تنزيل مجموعة خلفية Java وضغطها في تنزيلات zip للرجوع إليها. المحتوى المحدد كما يلي
نظرًا لاحتياجات المشروع ، يتم ضغط ملفات الصور الموجودة على الخادم وتعبئتها ، وتنزيلها على سطح المكتب المحلي.
أولاً ، JS في الواجهة الأمامية:
دالة doquerypic () {var picsdate = $ ("#picsdate"). val () ؛ var pianodate = $ ("#picdate"). val () ؛ var picinst = $ ("#pic_inst"). combotree ("getValue") ؛ var svrcode = $ ("#pic_svr_code"). val () ؛ var picstime = $ ("#pic_stime"). val () ؛ var pianotime = $ ("#pic_etime"). val () ؛ if (svrcode == null) {$ .messager.alert ('تلميح' ، "الرجاء إدخال رمز استعلام المعاملة") ؛ يعود؛ } آخر {$ .ajax ({type: "post" ، url: 'querypic.translog.action' ، البيانات: {f_brno: picinst ، f_sdate: picsdate ، f_edate: picdate ، f_svr_code: svrcode ، f_stime: picstim if (rcdata.success) {var rows = rcdata.picinfo ؛ الكل </th> <th style = 'العرض: 10 ٪ ؛ محاذاة النص: المركز'> التاريخ </th> <th style = 'width: 10 ٪ ؛ text-align: center' 10 ٪ ؛ محاذاة النص: المركز '> حالة التداول </th> <th style =' العرض: 12 ٪ ؛ تحالف النص: المركز '> رقم الجهاز </th> <th style =' width: 10 ٪ ؛ text-align: center '> code trading </th> <th style =' width: 10 ٪ ؛ text-align: center ' الوقت </th> </tr> </thead> <tbody> "؛ for (var i = 0 ؛ i <raws.length ؛ i ++) {deliefhtml = delationhtml +" <tr> <td align = 'center'> <input type = 'name =' pictureid 'value =' ' /> </td> <td> " + صفوف [i] .f_date +" </td> <td> " + صفوف [i] .ishasimg +" </td> <td> " + صفوف [i] .f_tx_name +" </td> صفوف [i] .f_dev_id + "</td> <td>" + صفوف [ "</td> </tr>" ؛ }}) ؛ }}}يتم عرض الرمز أعلاه على الواجهة بعد الاستعلام عن البيانات ذات الصلة ، ثم وفقًا لاحتياجات العميل ، يمكنك اختيار أجزاء من البيانات التي يجب تنزيلها وحفظها.
إرفاق مربع الاختيار حدد الكل/إلغاء تحديد كل رمز JS
// مربع الاختيار حدد All/Cancel حدد All var isCheckall = false ؛ function swapcheck () {if (isCheckall) {$ ("input [type = 'checkbox']"). كل (دالة () {this.checked = false ؛}) ؛ ischeckall = false ؛ } آخر {$ ("input [type = 'checkbox']"). كل (function () {this.checked = true ؛}) ؛ ischeckall = صحيح ؛ }} يتم استخدام الرمز التالي لتفاعل الخلفية. يرجى تذكرني أنه إذا قمت بتنزيل الملفات ، فلا تستخدم AJAX لإرسال البيانات. لقد فعلت ذلك من قبل ولم أستطع تنزيله. لقد اكتشفت ذلك فقط بعد يوم كامل. جزء التعليق هو رمز AJAX. يمكنك إلقاء نظرة عليه كمرجع:
وظيفة تنزيل () {var arr = new array () ؛ var picids = document.getElementSbyName ("pictureid") ؛ لـ (i = 0 ؛ i <picids.length ؛ i ++) {if (picids [i] .checled) {arr.push (picids [i] .value) ؛ }} if (arr.length <= 0) {$ .messager.alert ('t form' ، "no download content!") ؛ يعود؛ } else {$ ('#formpic'). attr ('action' ، 'downloadpic.translog.action') ؛ $ ("#formpic"). form ('submit' ، {onsubmit: function () {} ، success: function (data) {$ .messager.alert ('hint' ، 'image download success' ، 'info') ؛}}) ؛ /***$. ajax ({type: "post" ، url: 'downloadpic.translog.action' ، data: {picturelist: json.stringify (arr)} ، النجاح: function (rcdata) {if (rcdata.success) {$ .messager.show } {$ .messager.alert ('تلميح' ، rcdata.errmsg) ؛ */}} التالي هو تفاعل الخلفية ، أولاً وقبل كل شيء ، طبقة التحكم في وحدة التحكم:
/** * تنزيل مجموعة الصور * param request * param استجابة * regurn * throws ioException */public void downloadpic (httpservletRequest request ، httpservletresponse) يلقي ioException {// map <string> params = getParameters (request) ؛ String [] pictureids = request.getParametervalues ("pictureid") ؛ المصادقة au = getAuthentication (طلب) ؛ service.DownloadPIC (Pictureids ، au ، request ، response) ؛ يعود ؛ } طبقة الخدمة:
public void downloadpic (string [] params ، anitavication au ، httpservletrequest request ، httpservletresponse) يرمي ioException {// الإعداد الأولي لمسار سلسلة الملف المضغوط = system.getProperty ("ics.webapp.root") ؛ filezip = au.getusername ()+"-"+au.getAttribute ("f_brno")+"pictures.zip" ؛ String filePath = path + "//" + filezip ؛ // ثم يتم استخدامه لإنشاء ملف zip // filePatharr هو مجموعة مسارات ملف pdf التي تم الحصول عليها من خلال استعلام قاعدة البيانات بناءً على المعلومات المرسلة من المقدمة المقدمة (على وجه التحديد إلى اللاسلكس) <map <string> object >> filenamearr = new arraylist <string> // jsonarray jsons = jsonarray.fromObject (params.get ("picturelist")) ؛ /***list <string> pictureids = new ArrayList <String> () ؛ لـ (Object OBJ: jsons) {pictureids.add (obj.toString ()) ؛ } */ for (int i = 0 ؛ i <params.length ؛ i ++) {map <string ، object> spemap = new hashmap <string ، object> () ؛ spemap.put ("f_date" ، params [i] .SubString (0 ، 8)) ؛ spemap.put ("f_ics_batch" ، params [i] .SubString (8)) ؛ قائمة <map <string ، object >> reclists = dao.queryloginfo (spemap) ؛ لـ (int j = 0 ؛ j <reccists.size () ؛ j ++) {fileNameArr.add (recist.get (j)) ؛ }} // الملف الذي يجب ضغطه في عنوان الملف واسم الملف // string [] pathtytytyt = {"d: //13.jpg" ، "d: //1212.jpg"} ؛ // عنوان الملف المضغوط واسم الملف المراد إنشاؤه // String despath = "d: //downloads//new.zip" ؛ ملف zipfile = ملف جديد (FilePath) ؛ zipoutputstream zipstream = null ؛ fileInputStream zipsource = null ؛ BufferedInputStream BufferStream = NULL ؛ جرب {// إنشاء دفق الإخراج للحزمة المضغوطة النهائية zipstream = new zipoutputStream (FileOutputStream جديد (zipfile)) ؛ لـ (int i = 0 ؛ i <fileNameArr.size () ؛ i ++) {file file = new file ((string) fileNameArr.get (i) .get ("f_filename")) ؛ // file file = ملف جديد (pathtytyt [i]) ؛ // تنسيق الملف الذي يجب ضغطه في دفق الإدخال zipsource = جديد fileInputStream (ملف) ؛ // الإدخالات المضغوطة ليست ملفات مستقلة محددة ، ولكن قائمة العناصر في قائمة ملفات الحزمة المضغوطة ، والتي تسمى الإدخالات ، تمامًا مثل الفهرس // الاسم هنا هو اسم الملف ، وسيؤدي ازدواجية الملف إلى كتابة الملف. هنا ، يتم استخدام اسم الملف للملف في التعرف على الملفات zipentry zipentry = new zipentry (i+file.getName ()) ؛ . // Inport BufferStream = جديد BufferEdInputStream (Zipsource ، 1024 * 10) ؛ int read = 0 ؛ // إنشاء قراءة وكتابة Buffer Byte [] buf = new byte [1024 * 10] ؛ بينما ((read = bufferstream.read (buf ، 0 ، 1024 * 10))! = -1) {zipstream.write (buf ، 0 ، read) ؛ }}} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {// أغلق الدفق ، جرب {if (null! = bufferstream) bufferstream.close () ؛ if (null! = zipsstream) zipstream.close () ؛ if (null! = zipsource) zipsource.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} /*** اكتب ملف دفق إلى المتصفح الأمامي servleTOutputStream OS = reponse.getOutputStream () ؛ استجابة. استجابة. Response.addHeader ("Disposition" ، "المرفق ؛ filename =" + urlencoder.encode (filezip ، "utf-8")) ؛ BufferedInputStream BIS = NULL ؛ bufferedoutputstream bos = null ؛ حاول {bis = جديد bufferedInputStream (جديد fileInputStream (filePath)) ؛ BOS = جديد bufferedOutputStream (OS) ؛ Byte [] Buff = New Byte [2048] ؛ int bytesread ؛ بينما (-1! = (bytesread = bis.read (Buff ، 0 ، Buff.length))) {bos.write (Buff ، 0 ، bytesread) ؛ } os.flush () ؛ OS.Close () ؛ } catch (ioException e) {throw e ؛ } أخيرًا {if (bis! = null) bis.close () ؛ إذا (bos! = null) bos.close () ؛ ملف OBJ = ملف جديد (FilePath) ؛ if (obj.exists ()) {obj.delete () ؛ // حذف الملفات المضغوطة المؤقتة التي تم إنشاؤها محليًا بواسطة الخادم}}*///قم بتنزيل المتصفح // الحصول على معلومات وكيل المتصفح. . if (stringUtils.contains (useragent ، "msie") || stringUtils.contains (useragent ، "trident")) {// ie browser finalfilename = urlencoder.encode (filezip ، "utf-8") ؛ System.out.println ("IE Browser") ؛ } آخر إذا (stringUtils.contains (useragent ، "mozilla")) {// Google ، Firefox Browser FinalFilename = urlencoder.encode (filezip ، "utf-8") ؛ } آخر {finalFiLename = urlencoder.encode (filezip ، "utf-8") ؛ // متصفحات أخرى} استجابة. يتخلف المتصفح لفتح Response.setheader ("تحديد المحتوى" ، "المرفق ؛ filename =" +FinalFilename) ؛ // اسم ملف التنزيل servleTOutputStream ServleToutPutStream = response.getoutputstream () ؛ TEMPS DataOutputStream = جديد dataoutputStream (servleTOutputStream) ؛ datainputStream in = جديد datainputStream (جديد fileInputStream (filePath)) ؛ // المسار إلى ملف تنزيل المتصفح بايت [] b = new byte [2048] ؛ File Reportzip = ملف جديد (filePath) ؛ // ثم يتم استخدامه لحذف الملف المضغوط المؤقت Try {بينما ((in.read (b))! = -1) {temps.write (b) ؛ } temps.flush () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ optlogsvc.savelog (au.getusername () ، au.getAttribute ("f_brno") ، au.getattribute ("f_lstip") ، فشل toptlogservice.type_mr ، "" ، au.getusername ()+"صورة تنزيل+batch"+file ") ؛ } أخيرًا {if (temps! = null) temps.close () ؛ if (في! = null) in.close () ؛ if (reportzip! = null) reportzip.delete () ؛ // حذف الملف المضغوط المؤقت الذي تم إنشاؤه محليًا بواسطة servleToutOutputStream.close () ؛ } /***if (picinfollist.size ()> 0) {rc.put ("success" ، true) ؛ rc.put ("picinfo" ، pinfollist) ؛ optlogsvc.savelog (au.getusername () ، au.getAttribute ("f_brno") ، au.getattribute ("f_lstip") ، toptlogservice.type_mr ، "" ، au.getusername ()+"query download"+params.get ( } آخر {rc.put ("النجاح" ، خطأ) ؛ rc.put ("errmsg" ، "معلومات الاختبار") ؛ optlogsvc.savelog (au.getusername () ، au.getattribute ("f_brno") ، au.getattribute ("f_lstip") ، toptlogservice.type_mr ، "" ، au.getusername ()+"Query Download" }*/ optlogsvc.savelog (au.getusername () ، au.getAttribute ("f_brno") ، au.getattribute ("f_lstip") ، toptlogservice.type_mr ، "" ، au.getusername ()+"pitch pistial"+file "الناجح!) ؛ يعود ؛ }هناك مشكلة في تنسيق تحويل مجموعة JSON. إذا تم تنسيق JSON الذي تم إرساله من JSON في الواجهة الأمامية بواسطة JSON.Stringify ، فيجب تحليله بهذه الطريقة عندما تذهب إلى الخلفية.
مهاراتي في التصميم ليست جيدة ، لذلك دعونا نلقي نظرة. حكمت على أن المستعرض قد تم نسخه عبر الإنترنت ، لكنني وجدت أنه كان عديم الفائدة ولم أستطع التعرف على الصينيين. في النهاية ، لقد تعرضت للخطر وما زلت أستخدم اللغة الإنجليزية كاسم ملف. إذا واجهت رمزًا مشتعلة صينيًا ، فيمكنك البحث مرة أخرى على Baidu. كتب آخرون مقالات مماثلة ، لكن ليس لدي الطاقة لدراستها.
هذه طريقة لضغط الملفات الموجودة على الخادم. لقد رأيت أيضًا مقالات ذات صلة بايدو قبل الحصول على صور الشبكة وضغطها وتنزيلها ، وهو أمر مثير للاهتمام.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.