Neben dem vorherigen Artikel:
2. Datei -Upload und Download
Drei Tricks, die von Struts2, Seite JSP - Konfigurationsdatei Struts2.xml - und Aktionsklassenaktion entwickelt wurden
Datei hochladen Voraussetzung:
Die Methode der Formularform muss post sein
Der EncTePe der Formformular muss mehrteilig/Formdaten sein
Geben Sie das Feld Upload -Eingang von type = "Datei" an
Einige Regeln für Struts -Unterstützung für Datei -Uploads
1. Einzeldatei hochladen
Entwicklungsschritte:
1) Fügen Sie Commons-fileUpload-1.2.1.jar und Commons-i-1.3.2.jar unter web-inf/lib. Diese beiden Dateien können von http://commons.apache.org/ heruntergeladen werden
2) Schritt 2: Schreiben Sie nach oben. Jsp und setzen Sie den EncType der Formentabelle auf: "Multipart/Form-Data", wie folgt:
<%@ page Language = "java" import = "java.util. action = "$ {pageContext.request.contextPath}/Upload1.Action" method = "post" En EnsNex = "MultiPart/Form-Data"> <!-In MIME-> Benutzername: <input type = "text" name = "username"/> <BR/> Schöne Fotos: <Eingabe-Typ = "Datei" Datei "Datei" Datei "Datei". value = "hochladen"/> </form> </body>Fehlerseiten -Seite Fehler.jsp schreiben
<body> Der Server ist beschäftigt, versuchen Sie es nach einer Weile erneut. </body>
Success.jsp
<body> erfolgreich hochladen </body>
3) UploadAction1 -Klasse schreiben: Fügen Sie der Aktionsklasse Attribute hinzu, und die Attribute entsprechen dem Namen des Dateifelds im Formular:
Paket com.itheima.actions; import java.io.file; import java.io.ioxception; import org.apache.commons.io.fileutils; Private Dateifoto; // Übereinstimmung mit dem Feld des Upload -Feldes des Formulars. Der Typ ist Dateityp private Zeichenfolge Photofilename; // Dateiname private Zeichenfolge PhotocontentType hochladen. // gewöhnliches Feld: System.out.println (Benutzername); // Feld hochladen: Laden Sie in einen Ordner hoch. Speichern Sie es in den Bildern des Images -Verzeichnisses der Anwendung Realpath = ServletActActionContext.getServletContext (). GetRealPath ("//Images"); Dateiverzeichnis = neue Datei (RealPath); if (! Directory.Exists ()) {Directory.mkdirs (); } try {FileUtils.copyFile (Foto, neue Datei (Verzeichnis, Photofilename)); Erfolgserfolg; } catch (ioException e) {e.printstacktrace (); Rückgabefehler; }}}Fügen Sie die folgende Konfiguration zur Datei von Struts.xml hinzu
<action name="upload1" method="upload"> <interceptor-ref name="defaultStack"> <param name="fileUpload.allowedTypes">image/jpeg,image/png</param> <param name="fileUpload.allowedExtensionsSet">jpg,jpeg,png</param> </interceptor-ref> <Eltr EREWERN> /SUCCESS.JSP </result> <result name = "error">/error.jsp </result> <result name = "input">/index.jsp </result> </action>
Prinzipanalyse:
A. Der FileUpload -Interceptor ist für die Bearbeitung von Dateien -Upload -Vorgängen verantwortlich. Es ist ein Mitglied des Standard -Standardstack -Interceptor -Stacks. Der Interceptor verfügt über 3 Eigenschaften, die festgelegt werden können.
• Maximumsize: Die maximale Länge der hochgeladenen Datei (in Bytes) beträgt 2 MB 2 MB
• Erlaubt: Die Typen, die das Hochladen von Dateien zulassen, die durch Kommas getrennt sind.
• Zulassungsverteidiger: Ermöglicht das Hochladen von Dateierweiterungen. Diese 3 Eigenschaften können in der Datei struts.xml überschrieben werden, indem jede Erweiterung ankommt.
B. Das Hochladen von Dateien, die die Größe überschreiten oder illegal überschreiten, verursacht einen Fehler (wenden Sie sich an eine Eingabeansicht)
passieren:
<S: ActionError/> <S: FreilderRor/> Tipp zum Anzeigen der Fehlermeldung
C. Ändern Sie die Fehlermeldung Eingabeaufforderung in die chinesische Version: Mit Hilfe internationaler Nachrichtenressourcendateien
Wenn der Fehler durch die Konfiguration globaler Standardparameter verursacht wird, verwenden Sie die globale Nachrichtenressourcendatei am besten.
Die Standard-Eingabeaufforderung-Ressourcendatei für Struts2: Struts-Message.Properties-Datei von Struts2-Core-**. Jar. Vergleichen Sie einfach den Schlüsselwert, um den entsprechenden Wert zu überschreiben.
Die Konfiguration ist wie folgt:
struts.messages.Error.Uploading = Fehler -Uploading: {0}
struts.messages.Error.file.too.large = Datei zu groß: {0} "{1}" "{2}" {3}
Struts.Messages.Error.content.type.not.alowed = Content-Type nicht erlaubt: {0} "{1}" "{2}" {3}
Struts.Messages.Error.file.extension.not.alowed = Dateierweiterung nicht erlaubt: {0} "{1}" {2} "{3}
{0}: Der Wert des Namensattributs in <Eingabe type = "Datei" name = "UploadImage">
{1}: Der richtige Name der hochgeladenen Datei
{2}: Der Name der Upload -Datei, die in dem temporären Verzeichnis gespeichert ist
{3}: Die Art der hochgeladenen Datei (für struts.messages.Error.file.too.large ist die Größe der hochgeladenen Datei)
Quellcode:
Ändern Sie die Informationen der Ressourcendatei, in der der Fehler angezeigt wird
Schritt 1: Erstellen Sie eine neue Ressourcendatei wie FileUploadMessage.properties und platzieren Sie sie unter SRC, um die folgenden Informationen zur Ressourcendatei hinzuzufügen
Struts.Messages.Error.Uploading = Upload -Fehler: {0}
Struts.Messages.Error.file.too.large = Upload -Datei ist zu groß: {0} "{1}" {2} "{3}
struts.messages.Error.content.type.not.alowed = Der Typ der hochgeladenen Datei ist nicht erlaubt: {0} "{1}" {2} "{3}
Struts.messages.Error.file.extension
Schritt 2: Laden Sie die Ressourcendatei in die Datei struts.xml
<!-Ressourcendatei für Fehlerinformationen zum Hochladen von Dateien konfigurieren->
<konstant name = "struts.custom
2. Laden Sie mehrere Dateien hoch hoch
Hochladen mehrere Dateien, Sie können Arrays oder Listen verwenden, und andere ähneln den Upled -Dateien -Uploads.
Paket com.itheima.actions; import java.io.file; import java.io.ioxception; import org.apache.commons.io.fileutils; private Datei [] foto; // im Einklang mit dem Feld Upload -Feld des Formulars. Typ ist Dateityp. Speichern Sie es in den Bildern des Images -Verzeichnisses der Anwendung Realpath = ServletActActionContext.getServletContext (). GetRealPath ("//Images"); Dateiverzeichnis = neue Datei (RealPath); if (! Directory.Exists ()) {Directory.mkdirs (); } try {for (int i = 0; i <foto.length; i ++) {FileUtils.copyFile (Foto [i], neue Datei (Verzeichnis, Photofilename [i]); } Return Success; } catch (ioException e) {e.printstacktrace (); Rückgabefehler; }}}3. Datei -Download
Prinzip: Struts2 enthält einen Stream -Ergebnistyp, bei dem es sich um einen angegebenen Stream -Ergebnistyp handelt, der speziell zur Unterstützung der Datei -Download -Funktion verwendet wird. Es muss ein Eingabenname -Parameter angegeben werden. Dieser Parameter gibt einen Eingabestream an und bietet den Eintrag in die heruntergeladene Datei.
Codierungsschritte:
1) Action -Klasse -DownloadAktion:
Paket com.itheima.actions; import java.io.file; import java.io.fileinputstream; import java.io.filenotfoundexception; import Java.io.inputStream; import Java.net.urlencoder; com.opensymphony.xwork2.actionsupport; öffentliche Klasse DownloadAction erweitert actionupport. public InputStream getImage () {return Image; } public void setImage (InputStream -Bild) {this.image = Bild; } public String getFileName () {return Dateiname; } public Long getFileSize () {ideSIZEr zurückgeben; } public String download () löst Ausnahme aus {// Image Byte Stream String fileRealPath = servletActionContext.getServletContext (). fileName = DateinAMeutils.getName (fileRealPath); // Methode 1: Die chinesische Datei sollte url codiert sein // Dateiname = urlencoder.encode (Dateiname, "UTF-8"); FileSize = New Datei (fileRealPath) .Length (); System.out.println (Dateiname); Image = new FileInputStream (fileRealPath); Erfolgserfolg; }}Struts.xml Konfigurationsdatei: Konfigurieren Sie hauptsächlich die Ergebnisse des Stream -Typs
<Struts> <Constant name = "Struts.DevMode" value = "true" /> <konstant name <param name = "contentType"> application/octet-stream </param> <!-Erzählen Sie dem Browser-Antwort-Header, dem MIME-Format der Datei, und rufen Sie die GetContentType-Methode in Aktion an-> <!-Verwenden Sie den OGNL-Ausdruck in Struts.xml, um den Wert der Eigenschaft in der Aktionsklasse zu erhalten. Rufen Sie GetFileName () in der Aktionsklasse an-> <!-chinesischer Dateiname Codierung: Methode 2. Verwenden Sie OGNL-Ausdrücke, um die statische Methode der Urlencode aufzurufen-> <!-Standard-OGNL-Aufrufe statische Methoden können nicht erfolgen. Sie müssen einen konstanten Schalter einschalten. Strümpfe.ognl.AllowstaticMethodaccess = true-> <param name = "contentDisposition"> Anhang; Dateiname = $ {@java.net.urlencoder@encode (Filename, 'utf-8')} </param> <! </result> </action> </package> </struts> Der Interceptor- und Datei -Hochladen endet hier. Es ist so anstrengend, aber voller Leistung.
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.