Vorwort
Bei der Entwicklung von Webanwendungen müssen wir den Benutzern den Hochladen von Funktionen zur Verfügung stellen, z. B. das Hochladen eines Bildes als Avatar. Um Dateien hochzuladen, müssen wir die Methode des Formulars auf das Posten und den EncTTEPE auf multipart/form-data festlegen. Nur in diesem Fall sendet der Browser die Binärdaten der ausgewählten Datei des Benutzers an den Server. Dieser Artikel enthält eine detaillierte Zusammenfassung der Upload -Funktion im Struts2 -Framework. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung zusammen an.
Struts2 -Datei -Upload
Struts2 bietet keinen eigenen Anfrage-Parser, dh Struts2 behandelt keine mehrteiligen/Form-Daten-Anforderungen für sich. Es muss andere Upload -Frameworks aufrufen, um Binäranforderungsdaten zu analysieren, aber Struts2 verkauft den ursprünglichen Upload -Parser weiter, wodurch das Upload der Datei weiter vereinfacht wird.
In der Konfigurationsdatei default.properties von Struts2 sehen Sie den Konfigurationscode wie folgt:
### Parser, um HTTP-Postanforderungen zu bearbeiten, die mit dem Multipart/Form-Daten von MIME-Typ/Formdaten# struts.multipart.parser = cos# Struts.multipart.parser = pell# Struts.multipart.parser = jakarta-Streamstruts.multiPart.Parser = jakarta-Streamstruts.Multipart.PRUTSER = JAKARTA# uses.mult.PREISS.Codiert wurden. javax.servlet.context.tempdir MelaultTruts.multipart.savedir = Struts.multipart.maxSize = 2097152
Der obige Code wird hauptsächlich zum Konfigurieren des Upload -Parsers beim Hochladen von Dateien in Struts2 verwendet. Die Einkapselung von Struts2 isoliert die Differenz zwischen den zugrunde liegenden Datei -Upload -Komponenten. Solange der Resolver zum Hochladen dieser Konfigurationsdatei verwendet wird, können Entwickler leicht zwischen verschiedenen Datei -Upload -Frameworks wechseln.
Struts2 verwendet Jakarta Upload Parser standardmäßig. Wenn Sie ihn nicht mögen, können Sie auch zu etwas anderem wechseln. Das Folgende ist eine einfache Datei -Upload -Funktion basierend auf Struts2 über Code.
Implementieren Sie die Aktion des Datei -Uploads
Seite an der Rezeption:
<form action = "upload" methode = "post" engType = "MultiPart/Form-Data"> Titel: <Eingabe type = "text" name = "title"> <br> Datei: <Eingabe typ
Aktionsklasse:
öffentliche Klasse UploadAction erweitert actionupport {private String -Titel; privates Datei -Upload; private String uploadContentType; private String uploadFileName; private Zeichenfolge SavePath; public void setsavePath (String -Wert) {this.savepath = value; } private String goteSavePath () {String realpath = servletActionContext.getServletContext (). getRealPath ("/web-inf/" + savePath); realpath zurückkehren; } public void settitle (String -Wert) {this.title = value; } public String gettitle () {return title; } public void setUpload (Dateiwert) {this.Upload = value; } öffentliche Datei getUpload () {return upload; } public void setUploadContentType (String -Wert) {this.UploadContentType = value; } public String getFileContentType () {return uploadContentType; } public void setUploadFileName (String -Wert) {this.UploadFileName = value; } public String getUploadFileName () {return uploadFileName; } @Override public String execute () löst Ausnahme aus {FileOutputStream fos = new FileOutputStream (getavePath () + "//" + GetUploadFileName ()); FileInputStream fis = new FileInputStream (getUpload ()); byte [] buffer = neues byte [1024]; int len = 0; while ((len = fis.read (puffer))> 0) {fos.write (buffer, 0, len); } fis.close (); fos.close (); Erfolgserfolg; }}Struts.xml Konfigurationsdatei:
<package name = "upload" extends = "struts-default"> <action name = "upload"> <param name = "savePath">/upload </param> <result name = "success">/erfolgs.jsp </result> <result name = "eingabe">/index.jsp </result> </action> </paket> </paket> </paket>
Für den Aktionskurs sind zwei besondere Eigenschaften enthalten:
Diese beiden Attribute werden verwendet, um den Dateinamen der hochgeladenen Datei und den Dateityp der hochgeladenen Datei zu verkörpern. Für Struts2 muss die entsprechende Aktion drei Attribute verwenden, um die Informationen des Dateifelds zu verkapulieren, wenn das Formularformular ein Dateifeld mit dem Namensattribut XXX enthält, das entsprechende Aktion verwendet wird:
Durch den obigen Entwicklungsprozess können wir sehen, dass es in der Tat eine einfache Sache ist, Dateien über Struts2 hochzuladen. Wir müssen die Dateidomäne mit einer Eigenschaft von Type in Aktion in Verbindung bringen, damit wir problemlos auf den Dateiinhalt der hochgeladenen Datei zugreifen können. Wie Struts2 den mehrteiligen Parser verwendet, ist es für Entwickler völlig transparent.
Manuell Dateifilterung implementieren
In Webanwendungen können Benutzer häufig keine Freiladung frei laden. Wir müssen die von den Benutzern hochgeladene Dateityp und die Dateigröße einschränken, sodass die Dateifilterung während des Datei -Uploads durchgeführt werden muss. Jetzt werden wir die Filterung von Upload -Dateien manuell implementieren.
Konfigurieren Sie einen neuen Parameter in Struts.xml, um den unterstützten Upload -Typ anzugeben:
<param name = "duldtypes"> Bild/PNG, Bild/GIF, Image/JPEG </param>
Fügen Sie eine Validierungsfunktion in Aktion hinzu:
// @OverridePublic void validate () {String filterResult = filterType (getAweAntypes (). Split (",")) verifizieren; if (filterResult! }} public String filterType (String [] Typen) {String fileType = getFileContentType (); für (Zeichenfolge Typ: Typen) {if (type.equals (Filetype)) {return null; }} Rückgabefehler;} Dies implementiert nur das Typ -Urteil und implementiert dann die Größenüberprüfung basierend auf length() -Methode der Dateiklasse. Aber es ist so mühsam, lass uns über eine einfachere Aussage sprechen.
Interceptor implementiert die Dateifilterung
STRUTS2 bietet einen Interceptor für das Upload von Dateien, und die Dateifilterung kann einfacher durch Konfigurieren eines Interceptors erreicht werden. FileUpload des Datei -Uploads in Struts2. Damit der Interceptor funktioniert, müssen Sie nur die Interceptor -Referenz in der Aktion konfigurieren.
Bei der Konfiguration eines Datei -Pload -Interceptor können Sie zwei Parameter dafür angeben:
<!-configure FileUpload Interceptor-> <interceptor-ref name = "fileUpload"> <param name = "duldtypes"> Bild/PNG, Image/GIF, Image/JPEG </param> <param name = "maximalSize"> 20000000 </param> </interceptor-ref> <! /> <result name = "success">/success.jsp </result>
Auf diese Weise kann das Ändern der Konfiguration durchgeführt werden, was wirklich viel einfacher ist als ein Code zu schreiben.
Konfigurationsfehlermeldung
Für Upload -Fehler fordert das System standardmäßig englische Fehlermeldungen auf. Um jedoch internationale Eingabeaufforderungsnachrichten auszugeben, müssen jedoch die folgenden zwei wichtigen Nachrichtendefinitionen in die internationale Ressourcenkonfigurationsdatei hinzugefügt werden:
struts.messages.error.content.type.not.allowed = Der Upload -Dateityp ist falsch. Bitte laden Sie erneut hoch. Bitte laden Sie erneut hochstruts.messages.error.file.too.large = Die hochgeladene Datei ist zu groß. Bitte laden Sie sie erneut hochAls nächstes können Sie <S: Fielderror/> verwenden, um die Fehlermeldung auszugeben.
Konstante Konfiguration für das Datei -Upload
Zu Beginn des Artikels sprechen wir über die Konfiguration struts.multipart.saveDir default.properties . Was ist die spezifische Funktion dieses Konfigurationselements?
Während des Uploads von Struts2 -Dateien muss ein temporärer Ordner angegeben werden, um temporäre Dateien zu speichern, die während des Upload -Prozesses generiert wurden. Wenn kein temporärer Ordner angegeben ist, wird das System für die Verwendung von javax.servlet.context.tempdir unter der Arbeit/Catalina/localhost/Pfad unter dem Tomcat -Installationspfad standardmäßig verwendet. Und diese stolz.multipart.savedir konfiguriert den Speicherort temporärer Dateien. Daher müssen Sie während des Entwicklungsprozesses darauf achten, ob das Verzeichnis Berechtigungen gelesen und schreiben.
Es gibt auch eine Konfiguration struts.multipart.maxSize , die die Größe der hochgeladenen Datei darstellt. Wenn die maximalsize -Eigenschaft dieser Konfiguration und die maximalsize -Eigenschaft des Datei -Pload -Interceptors gleichzeitig angegeben ist, wird sie zunächst mit der MaximumSize -Eigenschaft struts.multipart.maxSize -Konfiguration vergleichen und dann mit der Maximumsize -Eigenschaft des Datei -Pload -Interceptor -Abfangs vergleichen. Wenn die Dateigröße die maximalische Konfiguration von struts.multipart.maxSize überschreitet, wird eine Ausnahme angezeigt und das Ergebnis wird nicht auf die Eingabe übertragen. Achten Sie darauf.
Zusammenfassen
Dieser Artikel fasst das Hochladen von Dateien in Struts2 im Detail zusammen. Es gibt viele Inhalte, im Grunde alle Inhalte im Handbuch. Verwenden Sie es einfach als Handbuch.
Okay, das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.