Lassen Sie uns zunächst über die Prinzipien des Hochladens und Herunterladens von Instanzimplementierung von Struts2 sprechen:
Struts 2 wird über Commons FileUpload -Datei hochgeladen.
Commons FileUpload verwendet den FileUpload -Interceptor, um die Datei an eine Aktionsinstanz zu binden, indem die Daten von HTTP in einem temporären Ordner gespeichert werden. Anschließend verwendet Struts den FileUpload -Interceptor. Somit können wir die vom Browser hochgeladenen Dateien auf lokale Datei -Weise bedienen.
Spezifische Implementierung :
1. erstellen index.jsp Seite
<body> <s: Form action = "upload" method = "post" thema = "einfach" engType = "MultiPart/Form-Data"> <table align = "center"> <tr> <TD> Upload-Datei uploaddatei </td> <td id = "more"> <s: Dateiname = "> </s: Datei> <input type") "add add" add. </td> </tr> <tr> <td> <s: subieren type = "button" value = "sure" onclick = "return checkf ()"/> </td> <td> <s: Reset Value = "reset"> </s: reset> </td> </tr> </table> <table align = "center"> <tr> <tr> <tr> <Td> tests.ttxt. href = "<s: url value = 'download.action'> <s: param name = 'fileName'> test.txt </s: param> </s: url>"> download </a> </td> </tr> </table> </s: Form> </body>
Result.jsp -Seite erstellen
<body> <s: Form> <div style = "border: 1px solid schwarz"> Datei erfolgreich hochgeladen: <br> <ul style = "Listenstil-Typ: Decimal"> <s: iterator value = "#request.FileName" id = "Datei" Status "Status"> <li> <s: Eigenschaft/</li> </s:: i> </s:: i> </s:: i> </s:: i id: ite: i iterator:
Vergessen Sie natürlich nicht, die Struts2-Tag-Referenz auf jeder Seite < %@taglib prefix = "s" uri = "/struts-tags" %> hinzuzufügen
2. Erstellen Sie eine Datei updown.js und verweisen Sie sie in index.jsp
Funktion checkf () {var files = document.getElementsByName ("Datei"); if (Dateien [0] .Value.length! = 0) {return true; } else {alert ("Bitte auswählen"); false zurückgeben; }} Funktion addmore () {var td = document.getElementById ("more"); var br = document.createelement ("br"); var input = document.createelement ("Eingabe"); var button = document.createelement ("Eingabe"); input.type = "Datei"; input.name = "Datei"; taste.type = "button"; Taste.Value = "REMED"; button.onclick = function () {td.removechild (br); td.removechild (Eingabe); td.removechild (button); } td.AppendChild (BR); td.AppendChild (Eingabe); td.Appendchild (button); } 3. Erstellen Sie updownloadAction.java
Paket com.action; import Java.io.file; import Java.io.fileinputStream; Import Java.io.filenotFoundException; Import Java.io.FileOutputStream; Import Java.io.inputStream; Import Java.io.outputStream; javax.servlet.http.httpServletRequest; import com.opensymphony.xwork2.actionsupport; import org.apache.struts2.servletactactacontext; öffentliche Klasse UpdownloadAction erweitert die Aktionssuche. private list <datei> file; // entsprechende Datei -Tags in JSP Private List <string> FileFileName; // private Liste <string> fileContentType; // private String -Dateiname; // Erhalten Sie den Pram -Parameter Pram in JSP @Suppresswarnings ("Depression") // Datei hochladung öffentlich String uplobowile () Ausnahme {String root = String {String root = ServletActionContext.getServletContext (). GetRealPath ("/upload"); // path system.out.println (root); InputStream InputStream; Datei ziele; OutputStream OS; für (int i = 0; i <file.size (); i ++) {inputStream = new FileInputStream (file.get (i)); destfile = new Datei (root, this.getFileFileName (). Get (i)); os = new FileOutputStream (destfile); byte [] buffer = neues byte [400]; int länge = 0; while ((länge = inputStream.read (puffer))> 0) {os.write (puffer, 0, länge); } inputStream.close (); os.close (); } HttpServletRequest request = servletActActionContext.getRequest (); Request.SetAttribute ("Dateiname", FileFileName); Erfolgserfolg; } // Datei Download public InputStream getdownLoadFile () löscht FileNotFoundException, nicht unterstütztenCodingException {System.out.println (getFileName ()) aus; // Wenn der Name Download-Dateinamen chinesisch ist, führen Sie Character Coding Conversion ServletActionContext.getResponse (). InputStream inputStream = new FileInputStream ("f:/" // Verwenden Sie den Absolute -Pfad, um die Datei "test.txt" von diesem Pfad + this.getFileName () herunterzuladen); System.out.println (InputStream); Rückgabe inputStream; } // public string downloadFile () löst Ausnahme aus {return scque; } public String getFileName () löscht unportedenCodingException {return Dateiname; } public void setFileName (String-Dateiname) löscht die nicht unterstützte AnscodingException {this.filename = new String (Dateiname.getBytes ("ISO8859-1"), "UTF-8"); }}HINWEIS: Die Methoden Get and Set -Methoden des Attributs wurden weggelassen.
Viertens schließlich die Konfigurationsdatei
1. Web.xml -Konfiguration
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2. Struts.xml Konfiguration
<struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <constant name="struts.multipart.saveDir" value="f:/"></constant> <package name="struts2" extends="struts-default"> <action name="upload" method="uploadFiile"> <result name = "Erfolg">/jsp/result.jsp </result> <interceptor-ref name = "fileUpload"> <!-maximalSize (optional)-Die maximale Länge der Datei, die in die von diesem Interceptor zulässige Aktion hochgeladen wurde (in Byte-Einheiten). Beachten Sie, dass dieser Parameter nichts mit den in Webwork.Properties definierten Eigenschaften zu tun hat. Der Standardwert ist 2MB-> <Param name = "maximalSize"> 409600 </param> <!-erlaubt (optional)-Eine von Kommas getrennte Liste von ContentType-Typen (wie Text/HTML). Diese Listen sind ContentTypes, die von diesem Interceptor zulässig sind, um an die Aktion zu gelangen. Wenn nicht angegeben, ist ein Upload-Typ zulässig .--> <param name = "duldtypes"> text/plain </param> </interceptor-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </action> <actionname = "download" method "methode" -Akte-file "> <resultor-type =" Erfolgs-Typ ". Alle Typen -> <param name = "contentType"> application/txt; </param> <!-Geben Sie den heruntergeladenen Dateinamen und die Anzeigemethode an, achten Sie jedoch auf den verstümmelten Code chinesischer Namen. Die Lösung lautet: Codierungsverarbeitung-> <!-ContentDisposition ist die Verarbeitungsmethode des Datei-Downloads, einschließlich Inline und Anhang. Der Standard ist inline. Bei der Verwendung von Anhängen ist es wie folgt konfiguriert: Anhang; Dateiname = "Dateiname". -> <param name = "contentDisposition"> Attachment; Dateiname = "$ {Dateiname}" </param> <!-InputStream von GetDownloadFile () Methode-> <param name = "inputName"> downloadFile </param> <!-die cache-Größe der Download-Datei-> <paramname = "puffersize"> 2048 </param> </resulted Datei> </resulted> </resulted> </resulted> </resulted> </resulted> </resultiert> </resulted> </resultiert> </resulted> </resultiert> </resulted> </resulted> </resulted> </". </package> </struts>Ein einfacher Struts2-Multi-File-Upload und ein Einzelfilm-Download werden implementiert.
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.