Dieser Artikel teilt den spezifischen Code für Java -Hintergrund -Batch -Download -Dateien und komprimiert sie für Ihre Referenz in ZIP -Downloads. Der spezifische Inhalt ist wie folgt
Aufgrund der Projektanforderungen werden die Bilddateien auf dem Server komprimiert und verpackt und auf den lokalen Desktop heruntergeladen.
Erstens Front-End-JS:
Funktion 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.Art ('Hint', "Bitte geben Sie den Transaktionsabfragecode ein"); zurückkehren; }else{ $.ajax({ type: "POST", url: 'queryPic.translog.action', data: {f_brno:picInst,f_sdate:picsDate,f_edate:picDate,f_svr_code:svrCode,f_stime:picsTime,f_etime:picTime}, success: function(rcdata){ if (rcdata.success) {var rows = rcdata.picinfo; Alle </th> <th style = 'width: 10%; text-align: center'> date </th> <th style = 'width: 10%; text-align: center'> date </th> <th style = 'width: 10%; text-mitte: center'> Gibt es ein Bild </th> <th style = 'width: 23%; 10%;text-align: center'>Trading status</th><th style='width: 12%;text-align: center'>Device number</th><th style='width: 10%;text-align: center'>Trading code</th><th style='width: 10%;text-align: center'>Affiliated institution</th><th style='width: 10%;text-align: center'>Trading Zeit </th> </tr> </thead> <tbody> "; für (var i = 0; i <Zeilen. /> </td> <td> " + Zeilen [i] .f_date +" </td> <td> " + Zeilen [i] .ishasimg +" </td> <td> " + Zeilen [i] .f_tx_name +" </td> <td> " + Rows [i]. Zeilen [i] .f_dev_id + "</td> <td>" + Zeilen [i] .f_svr_code + "</td> <td>" + Zeilen [i] .f_svr_code + "</td> <td>" + rows [i] .f_brno + "</td> </td> "</td> </tr>"; }}); }}}Der obige Code wird nach Abfragen der relevanten Daten auf der Schnittstelle angezeigt. Anschließend können Sie entsprechend den Anforderungen des Kunden auswählen, welche Datenstücke zum Herunterladen und Speichern sind.
Kontrollkästchen anhängen Wählen Sie alle JS -Code aus/abbrechen. Wählen Sie alle JS -Code aus
// Kontrollkästchen Wählen Sie alle/abbrechen. Wählen Sie alle var iScheckall = false; function swapCheck () {if (iSCheckall) {$ ("input [type = 'postbox']"). Jede (Funktion () {this.Thecked = false;}); ISSCECKALL = false; } else {$ ("input [type = 'postbox']"). Jede (function () {this. Checked = true;}); Isscheckall = wahr; }} Der folgende Code wird für die Hintergrundinteraktion verwendet. Bitte erinnern Sie mich daran, dass wenn Sie Dateien herunterladen, keine AJAX verwenden, um Daten zu senden. Ich habe es schon einmal gemacht und konnte es nicht herunterladen. Ich habe es erst nach einem ganzen Tag entdeckt. Der Kommentarteil ist der Ajax -Code. Sie können es sich als Referenz ansehen:
Funktion downloadpic () {var arr = new Array (); var picids = document.getElementsByName ("pictureId"); für (i = 0; i <picids.length; i ++) {if (picids [i]. Checked) {arr.push (picids [i] .Value); }} if (arr.length <= 0) {$ .Messager.Alert ('t fordert', "No Download Inhalt!"); zurückkehren; } else {$ ('#formpic'). attr ('action', 'downloadpic.translog.action'); $ ("#formpic"). Formular ('submit', {Onsubmit: function () {}, Erfolg: Funktion (Daten) {$ .Messager.Alert ('Hinweis', 'Image Download erfolgreich', 'info');}}); /***$. Ajax ({Typ: "post", url: 'downloadpic.translog.action', Daten: {picturelist: json.stringify (arr)}, Erfolg: function (rcdata) {if (rcdata.success) {$. } else {$ .Messager.Alert ('Hinweis', rcdata.errmsg); */}} Als nächstes kommt die Hintergrundinteraktion zunächst die Controller -Steuerungsschicht:
/** * Image -Batch -Download * @param Anfrage * @param Antwort * @Return * @throws ioException */public void downloadpic (httpServletRequest Request, httpServletResponse -Antwort) löscht IOException {// map <String, Object> params = getParameters (Request); String [] pictureIds = request.getParameterervalues ("pictureId"); Authentifizierung au = getAuthentication (Anfrage); service.downloadpic (pictusIds, au, Anfrage, Antwort); zurückkehren ; } Serviceschicht:
public void downloadpic (String [] Params, Authentifizierung Au, HttpServletRequest Request, HttpServletResponse -Antwort) löst IOException aus {// anfängliche Einstellung der komprimierten Datei String Path = System.getProperty ("ICS.Webapp.Root"). String fileZIP = au.getusername ()+"-"+au.getAttribute ("f_brno")+"pictures.zip"; String filepath = path + "//" + filezip; // Dann wird es verwendet, um eine ZIP -Datei zu generieren // Filepatharr ist der Satz von PDF -Dateipfaden, die über die Datenbankabfrage basieren, die auf den aus dem Vordergrund übertragenen Informationen aus dem Vordergrund (spezifisch in die Liste der Suffixe), Objekt <String, Objekt >> fileNamearr = new Arraylist <map <map <string <string, Objekt >> () (). // jsonArray jsons = jsonArray.fromObject (params.get ("picturelist")); /***list <string> pictureIds = new ArrayList <string> (); für (Objekt obj: jsons) {pictureIds.add (obj.tostring ()); } */ für (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)); Liste <map <String, Objekt >> reclists = Dao.Queryloginfo (spemap); für (int j = 0; j <reccists.size (); j ++) {fileNamearr.add (recists.get (j)); }} // Die Datei, die die Dateiadresse und den Dateinamen komprimiert werden muss // String [] pathytytyt = {"d: //13.jpg", "d: //1212.jpg"}; // Die komprimierte Dateiadresse und den Dateinamen generieren // String despath = "D: //downloads//new.zip"; Datei zipfile = neue Datei (Filepath); ZipoutputStream zipstream = null; FileInputStream zipSource = null; BufferedInputStream bufperstream = null; Versuchen Sie {// Konstruieren Sie den Ausgabestream des endgültigen komprimierten Pakets zipstream = neu zipoutputStream (neuer FileOutputStream (Zipfile)); für (int i = 0; i <fileNamearr.size (); i ++) {file file = new Datei ((String) fileNamearr.get (i) .get ("f_filename"); // Datei Datei = neue Datei (pathytyt [i]); // Formatieren Sie die Datei, die in den Eingabestream zipSource = new FileInputStream (Datei) komprimiert werden muss. // Komprimierte Einträge sind keine spezifischen unabhängigen Dateien, sondern listen Elemente in der Liste komprimierter Paketdateien auf, die als Index genannt werden, genau wie der Index // Der Name ist der Dateiname, und die Duplikation der Datei lässt die Datei überschrieben. Hier wird ich Plus -Dateiname für eine einzelne Dateierkennung Zipentry zipentry = neu zipentry (i+file.getName ()) verwendet; // Suchen Sie den Speicherort des komprimierten Eintrags und schreiben Sie die Datei in das komprimierte Paket zipstream.putNextEntry (Zipentry); // Eingabepufferstream = new BuferedInputStream (Reißurource, 1024 * 10); int read = 0; // Erstellen Sie Lese- und Schreibpuffer -Byte [] buf = new byte [1024 * 10]; while ((read = bufferstream.read (buf, 0, 1024 * 10))! = -1) {zipstream.write (buf, 0, read); }}} catch (exception e) {e.printstacktrace (); } endlich {// den Stream -Versuch schließen {if (null! = bufferStream) bufferstream.close (); if (null! = zipstream) zipstream.close (); if (null! = zipsource) zipsource.close (); } catch (ioException e) {e.printstacktrace (); }} /*** Schreiben Sie die Stream-Datei in den Front-End-Browser ServletOutputStream OS = Antwort.getOutputStream (); response.setContentType ("application/x-octet-Stream"); Antwort.SetContentLength ((int) zipfile.length ()); response.addHeader ("Inhaltsdisposition", "Attachment; Dateiname =" + urlencoder.encode (Filezip, "UTF-8")); BufferedInputStream Bis = null; BufferedOutputStream bos = null; try {Bis = new buferedInputStream (neuer FileInputStream (filepath)); BOS = neuer BufferedOutputStream (OS); Byte [] Buff = New Byte [2048]; int bytesread; while (-1! } os.flush (); os.close (); } catch (ioException e) {throw e; } Endlich {if (bis! = Null) Bis.close (); if (bos! = null) bos.close (); Datei obj = neue Datei (filepath); if (obj.exists ()) {obj.delete (); // temporäre komprimierte Dateien löschen, die lokal vom Server generiert werden}}*/// Den Browser herunterladen // Browser-Proxy-Informationen Final String userAgent = Anforderung.Getheader ("User-Agent"); // den Browser -Proxy beurteilen und das Codierungsformat festlegen, das auf den Browser -String -FinalFileName = null reagiert; if (stringutils.contains (userAgent, "msie") || Stringutils.contains (userAgent, "trident") {// ie browser finalFileName = urlencoder.encode (Filezip, "utf-8"); System.out.println ("IE Browser"); } else if (stringutils.contains (userAgent, "mozilla")) {// Google, Firefox Browser FinalFileName = urlencoder.encode (Filezip, "UTF-8"); } else {FinalFileName = urlencoder.encode (Dateizip, "UTF-8"); // Andere Browser} response.setContentType ("application/x-octet-Strom"); // Sagen Sie dem Browser, die Datei zu laden, anstatt sie direkt zu öffnen. Der Browser wird standardmäßig geöffnet, um die Antwort zu öffnen. DataOutputStream temps = new DataOutputStream (ServletOutputStream); DataNputStream in = new DataNputStream (neuer FileInputStream (Filepath)); // Der Pfad zum Browser -Download -Datei -Byte [] b = New Byte [2048]; Datei reportzip = new Datei (filepath); // Dann wird es verwendet, um die temporäre komprimierte Datei zu löschen {while ((in.read (b))! = -1) {temps.write (b); } temps.flush (); } catch (Ausnahme e) {e.printstacktrace (); optlogsvc.savelog (au.getusername (), au.getAttribute ("f_brno"), au } endlich {if (temps! = null) temps.close (); if (in! = null) in.close (); if (reportzip! = null) reportzip.delete (); // Die temporäre komprimierte Datei löschen, die lokal vom Server ServletOutputStream.Close () generiert wurde; } /***if (picinfollist.size ()> 0) {rc.put ("Erfolg", true); rc.put ("picinfo", picinfollist); optlogsvc.savelog (au.getusername (), au.getAttribute ("f_brno"), au } else {rc.put ("Erfolg", false); rc.put ("errmsg", "test info"); optlogsvc.savelog (au.getusername (), au.getAttribute ("f_brno"), au }*/ optlogsvc.savelog (au.getusername (), au.getAttribute ("f_brno"), au zurückkehren ; }Es gibt ein Problem mit dem JSON -Array -Konvertierungsformat. Wenn der vom Front-End-JSON gesendete JSON von JSON.Stringify formatiert ist, muss er auf diese Weise analysiert werden, wenn Sie zum Hintergrund gehen.
Meine Layout -Fähigkeiten sind nicht gut, also schauen wir uns an. Ich beurteilte, dass der Browser online kopiert wurde, aber ich fand, dass er nutzlos war und Chinesen nicht erkennen konnte. Am Ende habe ich kompromittiert und dennoch Englisch als Dateiname verwendet. Wenn Sie auf chinesischen verstümmelten Code stoßen, können Sie erneut auf Baidu suchen. Andere haben ähnliche Artikel geschrieben, aber ich habe nicht die Energie, sie zu studieren.
Dies ist eine Methode zum Komprimieren von Dateien, die auf dem Server vorhanden sind. Ich habe auch Baidu -verwandte Artikel gesehen, um Netzwerkbilder zu erhalten und zu komprimieren und herunterzuladen, was interessant ist.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.