Cet article partage le code d'implémentation spécifique pour le téléchargement et le téléchargement de fichiers Struts2 pour votre référence. Le contenu spécifique est le suivant
1. Téléchargement de fichiers
Téléchargez le composant de fichier soumis par Struts,
réception:
1) Poste de la méthode de soumission
2) Type de formulaire Multipart / Form-Data
3) Type d'entrée = fichier
Dans les coulisses:
Fileupload Component fourni par Apache
Catégorie de base:
FileItemFactory FileItem Factory
ServletFileUpload Core Class pour le téléchargement de fichiers dans Servlet
FileItem résume les informations des éléments de fichier de formulaire téléchargés. En bref, le téléchargement de fichiers est plus gênant à traiter.
Struts de Fichier Upload <br /> Interceptor de téléchargement de fichiers nous aide la fonction de téléchargement de fichiers tardif
<interceptor name = "fileupload" />
upload.xml
<strutts> <package name = "upload_" extends = "Struts-default"> <! - Remarque: le mot clé "FileUpload" ne peut pas être utilisé avec le mot clé "FileUpload" -> <action name = "fileUploadAction"> <! - restreignez les types de fichiers Uploaded -> <action interceptor-ref name = "defaultstack"> <! name = "fileupload.allowedextensions"> txt, jpg, jar </onsam> <! - restreignez les types de fichiers exécutés [utilisés en même temps que ci-dessus, obtenez l'intersection] <param name = "fileupload.AllowedTypes"> Text / Plain </Aram> -> </ interceptor-ref> <Result Name = "Success" name = "input"> / e / error.jsp </ result> </ action> </ package> </ struts>
upload.jsp
<body> <form action = "$ {pageContext.request.contextPath} / fileuploadAction" metheth = "post" EncType = "multipart / form-data"> username: <input type = "text" name = "username"> <br/> fichier: <intry type = "file" name = "file1 "> <br/> <puty type =" soumider "value =" upload "> </ File> <br/> <puty type =" soumettre "value =" upload "> </ File> <br/> <put type ="error.jsp
<body> error.jsp <br/> <! - Affichez tous les messages d'erreur générés par le framework Struts pendant l'exécution -> <% @ taglib uri = "/ struts-tags" prefix = "s"%> <s: fielderror> </ s: fielderror> </body> success.jsp <pody> success.jsp </ody>
Code de base
FileUpload .Class
classe publique FileUpload étend ActionSUpport {// Formulaire correspondant: <entrée type = "file" name = "file1"> File File1; // Nom de fichier String privé file1FileName; // Type de fichier (MIME) File de chaîne privée1ContentType; public void setFile1 (fichier file1) {this.file1 = file1; } public void setFile1FileName (String file1FileName) {this.file1FileName = file1FileName; } public void setFile1ContentType (String File1ContentType) {this.file1contentType = file1ContentType; } @Override public String execute () lève une exception {/ ********* Obtenez le fichier téléchargé et traitez-le ******* / // Téléchargez le fichier dans le répertoire de téléchargement // Obtenez le répertoire téléchargé la chaîne PATH PATH = ServletAcTContext.getServletContext (). GetRealPath ("/ upload"); // Créez le fichier de fichier cible de destfile = nouveau fichier (path, file1FileName); // Copiez le fichier téléchargé dans le fileUtils.copyfile cible (file1, destfile); retourner le succès; }} Détails de traitement de téléchargement de fichiers
un. Limite de taille de fichier
Le téléchargement de fichiers maximal pris en charge par Struct est de 2 m par défaut, et il est modifié par les constantes:
<! - 4. Modifiez la taille maximale des fichiers téléchargés sur 30m ->
<constante name = "strut.multupart.maxsize" value = "31457280" />
né Restreindre le type admissible de fichiers téléchargés: seuls les intercepteurs de fichiers avec les suffixes txt / jpg sont autorisés: injecter des paramètres pour limiter les types de téléchargement de fichiers
<! - restreignez le type de fichier téléchargé -> <interceptor-ref name = "defaultstack"> <! - restreignez l'extension du fichier en cours d'exécution -> <param name = "fileupload.Allowedextensions"> txt, jpg, jar </ param> <! - Param restreint le type de fichier en cours d'exécution [utilisé en même temps que ci-dessus, obtenez l'intersection] <! name = "fileupload.ALLOWEDTYPES"> Text / Plain </Aram> -> </ Interceptor-Ref>
2. Téléchargez le fichier
Téléchargement du fichier de Struts, 2 façons:
Méthode 1: Écrivez des données de flux d'octets au navigateur via l'objet de réponse; Définissez la méthode de l'en-tête de réponse pour le téléchargement 2: Méthode Struts
Téléchargez le fichier Struts:
Copiez le code comme suit: <result-type name = "stream" />
Tout d'abord, veuillez noter que vous créez un nouveau dossier de téléchargement dans le répertoire WebRoot et mettez le fichier que vous souhaitez fournir dans le dossier téléchargé.
upload.xml
<action name = "down_ *" metheth = "{1}"> <! - list affiche -> <résultat name = "list"> / e / list.jsp </ résultat> <! - Télécharger l'opération Renvoie la propriété du flux [en fait getAtTriNputStream ()] -> <param name = "inputName"> attriNputStream </ param> <! - L'en-tête de téléchargement, y compris: le nom de fichier affiché par le navigateur -> <param name = "ContentDisposition"> Pièces jointes; FileName = $ {downFileName} </ param> <! name = "BufferSize"> 1024 </param> </sult> </ Action>list.jsp
<body> <table align = "Center"> <tr> <Td> Numéro </td> <td> Nom de fichier </td> <td> Opération </java.sun.com/jsp/jstl/Core "Http://java.sun.com/jsp/jstl/Core" items = "$ {nom de fichiers}" vastatus = "vs"> <tr> <td> $ {vs.Count} </td> <td> $ {nom de fichier} </td> <td> <! - Créez un url -> <c: URL var = "url" value = "down_down"> <c: param name = "filename" Value = "$ {nom de fichier}"> </ c: param> </c: url> <a href = "$ {url}"> Télécharger </a> </td> </tr> </c: foreach> </s table> </ body>Downaction
/ ** * Téléchargement de fichiers * 1. Afficher la liste de tous les fichiers à télécharger * 2. Téléchargement de fichiers * * / Public Class DownloadAction étend ActionSupport {/ ******************** 1. Affichez la liste de tous les fichiers à télécharger **************************** / Liste de chaîne publique () lève l'exception {// Obtenir le PATH UPLOLOTYAGE PATH PATH = servletActionContext.getServletContext (). GetRealPath ("/ upload"); // fichier d'objet du répertoire = nouveau fichier (path); // Obtenez le nom de fichier de tous les fichiers à télécharger String [] fileNames = file.list (); // Enregistrer ActionContext AC = ActionContext.getContext (); // obtient la carte représentant la demande (la deuxième voie) map <string, objet> request = (map <string, object>) ac.get ("request"); request.put ("nom de fichiers", nom de fichiers); retourner "liste"; } / ****************** 2. Téléchargement du fichier **************************** / // 1. Obtenez le nom de fichier du fichier à télécharger le nom de fichier de chaîne privée; public void setFileName (String FileName) {// Gérez le problème dans les paramètres passés (obtenez la soumission) try {filename = new String (filename.getBytes ("iso8859-1"), "utf-8"); } catch (UnportEnCoDingException e) {Throw New RuntimeException (e); } // attribuez this.filename = nom de fichier; } // 2. Téléchargez la méthode commerciale soumise (configurer le flux dans strut.xml) public String Down () lève une exception {return "download"; } // 3. Méthodes pour retourner le flux de fichiers public InputStream GetAtTriNputStream () {return servletActionContext.getServletContext (). GetResourceSstream ("/ upload /" + filename); } // 4. Téléchargez le nom de fichier affiché (nom de fichier affiché par le navigateur) String public GetdownFileName () {// Le codage chinois est requis essayez {filename = urlencoder.encode (filename, "utf-8"); } catch (UnportEnCoDingException e) {Throw New RuntimeException (e); } retour nom de fichier; }}Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.