Parlons d'abord des principes de téléchargement et de téléchargement de l'implémentation d'instance de Struts2:
Struts 2 est téléchargé via le fichier de fichiers Commons.
Commons FileUpload utilise l'interceptor FileUpload pour lier le fichier à une instance d'action en enregistrant les données de HTTP à un dossier temporaire, puis Struts utilise l'intercepteur de fichiers. Ainsi, nous pouvons utiliser les fichiers téléchargés par le navigateur de manière locale.
Implémentation spécifique :
1. Créer une page index.jsp
<body> <s: form action = "upload" metheth = "post" thème = "Simple" encType = "multipart / form-data"> <table align = "Center"> <tr> <td> Sélectionnez le fichier upload </td> <td id = "More"> <S: fichier name = "file"> </ s: fichier> <entrée = "bouton" value = "Ajouter plus .. </tr> <tr> <td> <s: soumettre type = "Button" value = "soumi" onclick = "return checkf ()" /> </td> <td> <s: reset value = "reset"> </s: réset> </td> </tr> </ Table> <Table Align = "Center"> <tr> <td> test.txt </ td> <td> href = "<s: url value = 'download.action'> <s: param name = 'filename'> test.txt </ s: param> </ s: url>"> télécharger </a> </td> </tr> </ table> </ s: form> </ody>
Créer un résultat.jsp page
<body> <s: form> <div style = "border: 1px solide noir"> fichier téléchargé avec succès: <br> <ul style = "list-style-type: Decimal"> <s: iterator value = "# request.filename" id = "file" status = "status"> <li> <s: propriété /> </ li> </s: iterator> </ ul>
Bien sûr, n'oubliez pas d'ajouter une référence de balise Struts2 sur chaque page <% @ taglib prefix = "s" uri = "/ struts-tags"%>
2. Créez un fichier updown.js et référencez-le dans index.jsp
Fonction CheckF () {var files = document.getElementsByName ("fichier"); if (files [0] .value.length! = 0) {return true; } else {alert ("Veuillez sélectionner le fichier"); retourne false; }} fonction addmore () {var td = document.getElementById ("plus"); var br = document.CreateElement ("br"); var input = Document.CreateElement ("Input"); var bouton = document.CreateElement ("entrée"); input.type = "fichier"; input.name = "file"; Button.Type = "Button"; Button.Value = "Supprime"; Button.OnClick = function () {td.removechild (br); td.removechild (entrée); td.removechild (bouton); } td.appendChild (BR); td.appendChild (entrée); td.appendChild (bouton); } 3. Créez des mises à jour.
package com.action; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileoutputStream; import java.io.inportstream. javax.servlet.http.httpservletRequest; import com.opensymphony.xwork2.actsupport; import org.apache.struts2.servletActionContext; public class updownOLACKACT étend ActionSupport {private static final SerialVersionUid = 1l; Liste privée <Fichier> Fichier; // correspondant aux balises de fichier dans JSP Liste privée <string> fileFileName; // Liste privée <string> FileContentType; // Private String FileName; // Obtient le paramètre Pram dans la chaîne publique jsp @SuppressWarnings ("String root = ServletActionContext.getServletContext (). GetRealPath ("/ upload"); // upload Path System.out.println (root); InputStream InputStream; Fichier destfile; OutStstream OS; for (int i = 0; i <file.size (); i ++) {inputStream = new FileInputStream (file.get (i)); destfile = nouveau fichier (root, this.getFileFileName (). get (i)); OS = new FileOutputStream (DestFile); octet [] tampon = nouveau octet [400]; int length = 0; while ((longueur = inputStream.read (tampon))> 0) {os.write (tampon, 0, longueur); } inputStream.close (); os.close (); } HttpsservletRequest request = servletActionContext.getRequest (); request.setAttribute ("FileName", fileFileName); retourner le succès; } // Téléchargement de fichiers public EntréeStream GetdownLoadFile () lève FileNotFoundException, UnportEnCoDenCoDingException {System.out.println (getFileName ()); // Si le nom du fichier de téléchargement est chinois, effectuez le codage des caractères de conversion servletActionContext.getResponse (). SethEader ("Content-Disposition", "Pièce; FileName =" + java.net.urlencoder.encode (filename, "utf-8")); InputStream inputStream = new FileInputStream ("f: /" // Utilisez le chemin absolu pour télécharger le fichier "test.txt" à partir de ce chemin + this.getFileName ()); System.out.println (InputStream); return inputStream; } // Télécharger public String DownloadFile () Throws Exception {return Success; } public String getFileName () lève unportdencodingException {return filename; } public void SetFileName (String FileName) lève unportedEncodingException {this.filename = new String (filename.getBytes ("iso8859-1"), "utf-8"); }}Remarque: Les méthodes GET et SET de l'attribut ont été omises.
Quatrièmement, enfin le fichier de configuration
1. Configuration Web.xml
<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>
2. Configuration de strut.xml
<struts> <constante name = "struts.i18n.encoding" value = "utf-8"> </ constante> <constante name = "struts.multuparts.savedir" value = "f: /"> </ constante> <package name = "struts2" extends = "struts-default"> <action name = "upload" method = "uploadfile"> name = "Success"> / jsp / result.jsp </ result> <interceptor-ref name = "fileupload"> <! - MaximumSize (facultatif) - la longueur maximale du fichier téléchargé sur l'action autorisée par cet intercepteur (en unités d'octets). Notez que ce paramètre n'a rien à voir avec les propriétés définies dans webwork.properties. La valeur par défaut est de 2 Mo -> <param name = "maximumSize"> 409600 </param> <! - ALLODETTYPES (Facultatif) - Une liste de types de type contenu (telles que Text / HTML) séparées par des virgules (telles que Text / HTML). Ces listes sont des types de contenu autorisés par cet intercepteur à passer à l'action. S'il n'est pas spécifié, tout type de téléchargement est autorisé .--> <param name = "ALLERDTYPES"> TEXT / PLAINE </QUIQUIDE </ Interceptor-Ref> <Interceptor-Ref Name = "DefaultStack"> </ Interceptor-Ref> </ Action> <Action Name = "Download" Methode = "DownloadFile"> <Result Name = "Success" Type = Stream "All-All All-Tyneam Typeam Typeam"> <! -> <param name = "contentType"> Application / txt; </ param> <! - Spécifiez le nom de fichier téléchargé et la méthode d'affichage, mais faites attention au code brouillé des noms chinois. La solution est: Encoding Processing -> <! - ContentDisposition est la méthode de traitement du téléchargement de fichiers, y compris en ligne et en pièce jointe. La valeur par défaut est en ligne. Lors de l'utilisation des pièces jointes, il est configuré comme suit: pièce jointe; filename = "filename". -> <param name = "ContentDisposition"> pièce jointe; filename = "$ {filename}" </param> <! - Get InputStream de GetdownLoadFile () Méthode -> <param name = "InputName"> Téléchargement de téléchargement </ param> <! - Spécifiez la taille du cache du fichier téléchargé -> <param name = "Buffeter"> 2048 </ Param> </ Result> </ package> </ Struts>Un téléchargement multi-fichiers simples Struts2 et un téléchargement unique sont implémentés.
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.