Bei der Arbeit in B/S -Systemen werden normalerweise Dateien hochgeladen und Dateien heruntergeladen. Bevor wir eine Verbindung zum Struts2 -Framework herstellen, verwenden wir die FileUpload -Komponente des Unterprojekts von Commons unter Apache, um Dateien hochzuladen. Wenn wir das jedoch tun, sieht der Code umständlich und unflexibel aus. Nach dem Lernen von Struts2 bietet Struts2 einen besseren Implementierungsmechanismus für das Upload und den Herunterladen von Dateien. Hier erläutere ich den Quellcode für ein einzelnes Datei-Upload und das Multi-File-Upload. Hier müssen wir zwei JAR-Dateien importieren, die per Datei-Download hochgeladen wurden. Einer ist Commons-fileUpload-1.2.2.jar und der andere ist Commons-io-2.0.1.jar.
Struts2 Einzeldatei -Upload:
Zunächst gibt es eine Seite "JSP -Datei Upload". Dies ist relativ einfach, es ist ein Formular mit einem Datei -Upload -Feld.
<!-Beim Hochladen der Datei muss die Formularübermittlungsmethode postet werden, da die Binärdatei beim Hochladen der Datei möglicherweise sehr groß ist. Es gibt auch das EngeTPE -Attribut. Dieses Attribut muss als Multipart/Form-Data geschrieben werden, ansonsten wird es in Binärtext auf den Server hochgeladen-> <form action = "fileUpload.Action" methode "post" engtype = "MultiPart/Form-Data"> Benutzername: <input type = "text" name = "userername"> <bbr> -Antype: <Input-Typ "Datei". </form>
Als nächstes kommt der Datei -PloadAction -Teil des Codes. Da Struts2 einen guten Praktikumsmechanismus zum Hochladen und Herunterladen bietet, müssen wir nur sehr wenig Code in Aktion schreiben:
öffentliche KlassendateiEUploadAction erweitert actionupport {private String -Benutzername; // Beachten Sie, dass die Datei nicht auf die von der Front-End JSP hochgeladene Datei selbst verweist, sondern die Datei, die sie unter der privaten Datei temporärer Ordner gespeichert hat. // Der Name der Datei, die private String -DateifileName eingereicht wurde; // Der MIME -Typ der Datei, die private Zeichenfolge fileContType eingereicht wurde; public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } öffentliche Datei getFile () {Rückgabedatei; } public void setFile (Dateidatei) {this.File = Datei; } public String getFileFileName () {return FileFileName; } public void setFileFileName (String filefileName) {this.FileFileName = FileFileName; } public String getFileContentType () {return fileContentType; } public void setFileContentType (String fileContentType) {this.fileContentType = fileContentType; } @Override public String execute () löst Ausnahme aus {String root = servletActionContext.getServletContext (). GetRealPath ("/upload"); InputStream ist = neuer FileInputStream (Datei); OutputStream os = new FileOutputStream (neue Datei (Root, FileFileName)); System.out.println ("DateifileName:" + FileFileName); // Da Datei eine Datei ist, die in einem temporären Ordner gespeichert ist, können wir den Dateinamen und den Dateipfad ausdrucken, um festzustellen, ob sie mit dem vorherigen FileFileName System.out.println ("Datei:" + Datei.getName ()) übereinstimmen. System.out.println ("Datei:" + file.getPath ()); Byte [] Buffer = neues Byte [500]; int länge = 0; while (-1! } os.close (); IS.CLOSE (); Erfolgserfolg; }}Zunächst müssen wir klarstellen, dass sich die Datei hier nicht wirklich auf die von JSP hochgeladene Datei bezieht. Wenn die Datei hochgeladen wird, sucht Struts2 zunächst nach dem von struts.multiPart.Savedir angegebenen Speicherort (dies ist in Standardeinstellung). Wir können eine neue Eigenschaftsdatei von Struts.Properties erstellen, um den Speicherort der temporären Dateispeicher anzugeben. Wenn es nicht angegeben ist, wird die Datei in Tomcats Apache-Tomcat-7.0.29/Work/Catalina/Localhost/Verzeichnis gespeichert. Anschließend können wir den Speicherort nach dem Hochladen der Datei angeben und ihn einfach über den Ausgabestream in den Stream schreiben. Zu diesem Zeitpunkt können wir die Datei sehen, die wir im Ordner hochgeladen haben.
Nach dem Hochladen der Datei müssen wir sie noch herunterladen. Tatsächlich ist das Prinzip des Herunterladens von Struts2 sehr einfach. Es soll einen Eingabestream definieren und dann die Datei in den Eingabestream schreiben. Die Schlüsselkonfiguration besteht weiterhin darin, sie in der Konfigurationsdatei von Strebens.xml zu konfigurieren:
Der Code für FileDownloadAction lautet wie folgt:
public class fileDownloadAction erweitert actionupport {public InputStream getdownloadFile () {return servletActionContext.getServletContext (). } @Override public String execute () löst Ausnahme aus {return Erfolg; }}Lassen Sie uns sehen, dass diese Aktion nur einen Eingabestream definiert und ihn dann mit einer Getter -Methode liefert. Schauen wir uns als Nächstes die Konfigurationsdatei von Struts.xml an:
<Action name = "apledownload"> <result name = "Erfolg" type = "stream"> <param name = "contentDisposition"> Anhang; Dateiname = "Adressbuch 4. September 2012.xls" </param> <param name = "inputName"> downloadFile </param> </result> </action> </action> </action>
Es gibt verschiedene Dinge, auf die wir in der Konfigurationsdatei von Strebens.xml achten müssen. Zunächst die Art des Ergebniss. In der Vergangenheit haben wir eine Aktion definiert. Grundsätzlich haben wir das Typ -Attribut im Ergebnis im Grunde nicht geschrieben, da es standardmäßig die Weiterleitung (Dispatcher) anfordert. Zusätzlich zu diesem Attribut gibt es im Allgemeinen Werte wie Umleitung (Umleitung). Da wir hier den Datei -Download verwenden, muss der Typ als Stream -Typ definiert werden, wobei die Aktion mitgeteilt wird. Dies ist das Ergebnis des Datei -Downloads. Im Ergebniselement gibt es im Allgemeinen Param-Subelemente. Dies wird verwendet, um die Parameter beim Herunterladen der Datei einzustellen. E Diese Eigenschaft soll den Dateieingabestream in Aktion bringen. Der Name muss dem Eingabestream -Attribut in Aktion übereinstimmen. Dann ist das ContentDisposition -Attribut das ContentDisposition -Attribut. Diese Eigenschaft wird im Allgemeinen verwendet, um anzugeben, wie wir die heruntergeladene Datei verarbeiten möchten. Wenn der Wert der Anhang ist, wird ein Download -Box angezeigt, sodass der Benutzer auswählen kann, ob heruntergeladen werden soll. Wenn dieser Wert nicht festgelegt ist, prüft der Browser zunächst, ob die heruntergeladene Datei geöffnet werden soll. Wenn dies möglich ist, wird die heruntergeladene Datei direkt geöffnet (natürlich ist dies nicht das, was wir brauchen). Ein weiterer Wert ist der Dateiname, der den von der Datei beim Herunterladen aufgeführten Datei -Download -Namen ist. Nach dem Konfigurieren dieser Informationen können wir die Funktion "Datei Download" implementieren.
Struts2 Mehrfachdateien hochladen :
Tatsächlich ist das Prinzip des Multi-File-Uploads das gleiche wie ein einzelner Datei-Upload. Eine einzelne Datei -Upload ist eine einzelne Datei, und eine Liste <Datei> oder ein Datei [] wird ein Array hochgeladen. Schauen wir uns zunächst den Code des Front-End-JSP-Teils an. Hier habe ich JQuery verwendet, um dynamische Dateiabschluss und dynamische Download -Boxen zu implementieren:
<script type = "text/javaScript" src = "script/jQuery-1.8.1.js"> </script> <script type = "text/javaScript"> $ (function () {$ ("##button"). click (function () {var html = $ ("<eingabe type = 'Datei' Datei 'Datei' Datei '. value='delete'><br>"); $("#body div").append(html).append(button); button.click(function() { html.remove(); button.remove(); }) }) }) </script> </head> <body id="body"> <form action="fileUpload2.action" method="post" engType = "MultiPart/Form-Data"> Benutzername: <Eingabe type = "text" name = "userername"> <br> Datei: <Eingabe type = "Datei" name = "Datei"> <Eingabe type = "button" value = "add" id "id =" button "> <br> </body> </div> </div> </body> </body> </body> </body> </body> </body> </body> </body> Die Namen von Dateien müssen als Dateien bezeichnet werden, und dann ist der Aktionscode zum Hochladen mehrerer Dateien wie folgt:
public class FileUploadAction2 erweitert actionupport {private String -Benutzername; // Hier verwenden wir die Liste, um hochgeladene Dateien zu speichern. Die Datei bezieht sich auch auf temporäre Dateien in temporären Ordnern und nicht auf die tatsächlich hochgeladenen Dateien private Liste <Datei> Datei. // Diese Liste speichert den Namen der Datei, die der Datei in der Liste <Datei> private Liste <string> FileFileName entspricht. private list <string> fileContentType; public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } publiclist <Datei> getFile () {Rückgabedatei; } public void setFile (Liste <Datei> Datei) {this.File = Datei; } publiclist <string> getFileFileName () {return FileFileName; } public void setFileFileName (Liste <string> fileFileName) {this.FileFileName = FileFileName; } publiclist <string> getFileContentType () {return fileContentType; } public void setFileContentType (list <string> fileContentType) {this.fileContentType = fileContentType; } @Override public String execute () löst Ausnahme aus {String root = servletActionContext.getServletContext (). GetRealPath ("/upload"); für (int i = 0; i <file.size (); i ++) {inputStream is = new FileInputStream (file.get (i)); OutputStream os = new FileOutputStream (neue Datei (root, FileFileName.get (i))); Byte [] Buffer = neues Byte [500]; @SuppressWarnings ("unbenutzt") int länge = 0; while (-1! } os.close (); IS.CLOSE (); } Return Success; }}Dies schreibt es auch in einen Ausgabestream, sodass wir mehrere hochgeladene Dateien im Ordner sehen können
Die nächste Datei -Download entspricht genau dem Download der Datei, und das gleiche ist struts.xml, also werde ich sie hier nicht wiederholen.
Zusammenfassung: Im Allgemeinen vereinfacht der von Struts2 bereitgestellte Datei -Upload- und Download -Mechanismus viele unserer Code. Wir können diesen Mechanismus in zukünftigen Projekten verwenden. Wir können auch die FileUpload -Komponente verwenden, um Dateien hochzuladen. Dies wird durch persönliche Vorlieben bestimmt!
Es gibt nur so viele Inhalte über das Upload- und Download -Funktionen von Dateien in Javaweb. Vielen Dank für Ihre Lektüre.