Dieser Artikel teilt die spezifischen Codes für Javaweb Multi-File Upload und Reißverpackung und Herunterladen für Ihre Referenz. Der spezifische Inhalt ist wie folgt
Datei -Upload- und Downloadfunktionen werden häufig in Projekten verwendet. Dieser Artikel fasst die Szenen in der Javaweb-Umgebung, in der Multi-Datei-Upload- und Batch-Verpackung und den Download-Funktionen, einschließlich der Teile an der Rezeption und den Backend-Teilen, zusammen.
Lassen Sie uns zunächst klarstellen:
Die Seite kann die AJAX -Anfrage nicht direkt aktualisiert und Anforderungen herunterladen und hochladen können nicht gesendet werden. Das Hochladen und Herunterladen muss basierend auf der gesamten Seitenanforderung implementiert werden. Diese Funktion wird im Allgemeinen durch Erstellen von Formularen in Projekten erreicht.
1. Laden Sie mehrere Dateien hoch hoch
Die Projektanforderungen bestehen darin, die Funktion mit mehreren Image-Uploads zu realisieren. Nachdem ich mich auf die vielen Plug-in-Methoden im Internet bezogen hatte, entschied ich mich, die ursprüngliche JQuery-Upload-Lösung auszuwählen. Befolgen Sie die folgenden Schritte, um den spezifischen Code zu veröffentlichen.
1. HTML -Teil (kann zum Bau mit JS weggelassen werden)
<form id = "UploadForm" methode = "post" engType = "multiPart/Form-Daten"> <Eingabe type = "Datei" HIDDEN NAME = "FileImage" multiple/> <a href = "javaScript: void (0);" rel = "externer nofollow" rel = "externe nofollow" id = "filesubmit" onclick = "UploadFilemulti ()"> Informationen hochladen </a> </Form>
Es gibt einige Erklärungen:
1.. Enctpe = "Mehrfach-/Formdaten" in Form
2. Verwenden Sie im Beispiel Tags zum Erstellen von Subjekten
2. Js Teil
var formdata = new FormData ($ ("#uploadForm") [0]); FormData.Append ("FoldName", "DatumList"); // Setzen Sie den übergeordneten Ordner Name FormData.Append ("OdeCode", SelfOrderCode); FormData.Append ("DatumType", DatumType); (result.success) {// die Boxdatei $ ("#FileImage"). Val (""); }, error: function () {duschrortoast ('Anforderung fehlgeschlagen!')}}); Es gibt einige Erklärungen oben:
1. var formdata = new FormData ($ ("#Uploadform") [0]);
2. Verwenden Sie formData.Append ("OdeCode", selfOrderCode); andere Parameter hinzufügen
Java Backend
MultiparthttpServletRequest mrequest = (multiparthttpServletRequest) Anforderung; Liste <MultiPartFile> files = mrequest.getFiles ("DateiImage");Es gibt einige Erklärungen oben:
1. Holen Sie sich den MultiparthttpServletRequest, der dem Namen des Datei -Tags entspricht
2. Batch -Download von Dateien
In diesem Projekt müssen eine Stapel von Dateien in Stapeln heruntergeladen werden. Verwenden Sie ZIP, um die Datei auf dem Server zu komprimieren und dann die Datei in den Client herunterzuladen.
Bei Online -Abfrage kann die Verwendung von Java -Dateiausgabemisten das Problem der Markennamen in komprimierten Dateien nicht lösen. Lösung: Verwenden Sie das Ant.jar -Paket. Beim Erstellen einer komprimierten Datei können Sie das Codierungsformat der Datei festlegen, und das Problem der Markennamen der Kelsel wird gelöst.
HTML -Teil (kann weggelassen werden, um mit JS zu bauen)
<form id = "uploadForm" methode = "post" engType = "multiPart/Form-data"> <div> <input type rel = "externer nofollow" rel = "externer nofollow" onclick = "batchDatumListDownload ()"> batchdown </a> </div> </form>
JS Teil
// Batch -Download -Funktion batchDatumListDownload () {var param = {}; param.datumtype = $ ("#datumtypeq"). val (); if (param.datumtype == -1) {param.datumtype = null; // alle} param.orderCode = selfOrderCode abfragen; $ ("#UploadForm input [name = orderCode]"). val (param.orderCode); $ ("#UploadForm input [name = datumtype]"). val (param.datumtype); var form = $ ("#UploadForm") [0]; Formular.Action = "order/datumlist/batchDownloadDatumList"; Form.Method = "post"; Form.Submit (); // Formular Senden}Backend -Teil
public void batchDownloadDatumList (DatumListVo datumListvo, httpServletResponse -Antwort) {try {// Abfrage -Dateiliste <DatumListVO> volist = datumlistservice.QueryDatumLists (datumListVo); // Dateiliste komprimieren <datei> file = new ArrayList <> (); für (datumListVo: volist) {file Datei = new Datei (vo.getDatumUrl ()); Dateien.Add (Datei); } String -Dateiname = datumListvo.getorderCode () + "_" + datumListvo.getDatumType () + ".zip"; // Erstellen Sie eine temporäre Datei für verpackte Downloads auf der Server -Seite String GlobalUploadPath = ""; String osname = system.getProperty ("os.name"); if (osname.tolowerCase (). IndexOf ("Windows")> = 0) {globalUploadPath = globalKeys.getString (GlobalKeys.Windows_Upload_Path); } else if (osname.tolowerCase (). indexof ("linux")> = 0 || osname.tolowerCase (). Indexof ("mac")> = 0) {globalUploadPath = globalKeys.getString (GlobalKeys.linux_upload_path); } String outfilepath = globalUploadPath + file.separator + Dateiname; Datei Datei = neue Datei (OutfilePath); // Dateiausgabe Stream FileOutputStream outstream = new FileOutputStream (Datei); // komprimieren Stream ZipoutputStream toclient = neuer ZipoutputStream (überstream); // Setzen Sie die Zeichencodierung in der komprimierten Datei, sonst wird es verstümmelt. Ziputil.zipfile (Dateien, toclient); toclient.close (); outstream.close (); Ziputil.downloadzip (Datei, Antwort); } catch (Ausnahme e) {e.printstacktrace (); }}Unter ihnen Ziputil.java
/** * Dateien in der komprimierten Dateiliste * * @param -Dateien * @param outputStream * @throws ioException */public static void zipfile (Listdateien, ZipoutputStream -AusgangStream) löst IOException, ServleTException {try {int size = Dateien.SIZE.SIZE (); // Dateien in der komprimierten Liste für (int i = 0; i <size; i ++) {file Datei = (Datei) Dateien.get (i); try {zipfile (Datei, outputStream); } catch (Ausnahme e) {Fortsetzung; }}} catch (Ausnahme e) {throw e; }}/** * Schreiben Sie die Datei in die ZIP -Datei * * @param InputFile * @param outputStream * @throws Exception */public static void Zipfile (Dateieingangsfile, ZipoutputStream -Ausgangsstream) löst IOException, ServletException {try {if (inputFile.Exists ()) {) {ifFile (InputFile (InputFile)). FileInputStream (inputFile); BufferedInputStream Binstream = neuer BufferedInputStream (Instreme); ZIPEntry -Eintrag = neu Zipentry (inputFile.getName ()); outputStream.putNextEntry (Eintrag); endgültig int max_byte = 10 * 1024 * 1024; // Der maximale Strom beträgt 10 m langstreamTotal = 0; // die Kapazität des Akzeptanz von Stream int streamnum = 0; // Die Anzahl der Streams, die getrennt werden müssen, int LeaveByte = 0; // die Anzahl der Zeichen, die in der Datei -Byte [] inoutByte hinterlassen wurden; // Byte Array akzeptiert die Daten der Datei streamTotal = binstream.available (); // Die maximale Anzahl von Zeichen des Streams wird über die verfügbare Methode Streamnum = (int) math.floor (StreamTotal /max_byte) erhalten; // Die Anzahl der Zeichen, die zum Erhalten der Stream -Datei LeavesByte = (int) StreamTotal % max_byte getrennt werden müssen; // Nach der Aufteilung der Datei die verbleibende Nummer if (Streamnum> 0) {for (int j = 0; j <streamnum; ++ j) {inoutByte = new byte [max_byte]; // im Stream lesen und im Byte Array Binstream.read (inoutbyte, 0, max_byte) speichern; outputStream.write (inoutbyte, 0, max_byte); // schreibe den Stream}} // die verbleibenden Stream -Daten in OutByte = New Byte [LeaveByte] aus. Binstream.read (inoutbyte, 0, LeaveByte); outputStream.write (inoutbyte); outputStream.CLOSEENTRY (); // schließt den aktuellen ZIP -Eintrag und positioniert den Stream zum Schreiben des nächsten Eintrags Binstream.close (); // closetream.close (); }} else {throw New servleTException ("Datei existiert nicht!"); }} catch (ioException e) {throw e; }}/** * Laden Sie die verpackte Datei herunter * * @param Datei * @param Antwort */public static void Downloadzip (Dateidatei, httpServletResponse -Antwort) {try {// Die Datei laden Sie die Datei als Stream herunter. BufferedInputStream fis = new BufferedInputStream (neuer FileInputStream (file.getPath ())); byte [] buffer = new byte [fis.Available ()]; fis.read (puffer); fis.close (); // Reaktionsantwort löschen.reset (); OutputStream toclient = new bufferedOutputStream (response.getOutputStream ()); response.setContentType ("Anwendung/Oktett-Stream"); response.setheader ("Inhaltsdisposition", "Anhang; Dateiname =" + file.getName ()); Toclient.write (Puffer); toclient.flush (); toclient.close (); Datei.delete (); // die generierte serverseitige Datei löschen} catch (ioException ex) {ex.printstacktrace (); }} Die obigen erfüllt im Grunde die Anforderungen für das Hochladen und Herunterladen von Dateien.
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.