À côté de l'article précédent:
2. Téléchargement et téléchargement de fichiers
Trois astuces développées par Struts2, Page JSP - Fichier de configuration Struts2.xml - And Action Classé Access
Téléchargement de fichiers Préalable:
La méthode du formulaire doit être publié
L'enctitype de la forme doit être multipART / Form-Data
Fournissez le champ de saisie de téléchargement de type = "fichier"
Certaines règles pour la prise en charge des Struts pour les téléchargements de fichiers
1. Téléchargement de fichiers unique
Étapes de développement:
1) Ajouter Commons-fileupload-1.2.1.jar et commons-io-1.3.2.jar sous Web-Inf / lib. Ces deux fichiers peuvent être téléchargés à partir de http://commons.apache.org/
2) Étape 2: écrivez upfile.jsp, et définissez l'EnCype de la table de formulaire à: "Multipart / Form-Data", comme suit:
<% @ Page Language = "Java" Import = "Java.util. *" Pageencoding = "UTF-8"%> <% @ taglib uri = "/ struts-tags" Prefix = "S"%> <SORGE> <S: ActionError /> <hr /> <S: Fielderror> </ s: fielderror> <formulaire Action = "$ {pagecontext.request.contextPath} /upload1.action" Method = "Post" ENCTYPE = "multipart / form-data"> <! - Passing in Mime -> username: <Input type = "text" name = "username" /> <br/> </ form> </ody>Écrire la page d'erreur Error.jsp
<body> Le serveur est occupé, réessayez après un certain temps. </docy>
succès.jsp
<body> Télécharger avec succès </body>
3) Rédaction de la classe UploadAction1: Ajouter des attributs à la classe d'action, et les attributs correspondent au nom du champ de fichier dans le formulaire:
package com.itheima.actions; import java.io.file; import java.io.ioexception; import org.apache.commons.io.fileutils; import org.apache.struts2.servletaccontext; import com.opensymphony.xwork2.actionSupport; // lime upload: up uplower: Public Class uplatecaction1 étend des actions œuvre {private usage nom de la chaîne de fichiers: nom de classe publique Upage1 étend Actionupport; Photo de fichier privé; // cohérent avec le nom de champ de téléchargement du formulaire. Le type est un type de fichier String Private PhotoFileName; // Téléchargez le nom de fichier String privé PhotoContentType; // Télécharger le fichier mime type // Omit Getter and Setter Methods public String upload () {System.out.println (PhotoFileName + ":" + PhotoContentType); // champ ordinaire: System.out.println (nom d'utilisateur); // Téléchargez le champ: Téléchargez dans un dossier. Enregistrez-le dans la chaîne du répertoire d'images de l'application realPath = servletActionContext.getServletContext (). GetRealPath ("/ images"); File Directory = nouveau fichier (realPath); if (! Directory.exists ()) {Directory.mkDirs (); } try {fileUtils.copyfile (photo, nouveau fichier (répertoire, photoFileName)); retourner le succès; } catch (ioException e) {e.printStackTrace (); Erreur de retour; }}}Ajoutez la configuration suivante au fichier strut.xml
<action name = "upload1" metheth = "upload"> <interceptor-ref name = "defaultstack"> <param name = "fileupload.allowedTypes"> image / jpeg, image / png </ param> <param name = "fileupload.AllowedextensionsSet"> jpg, jpeg, png </ param> </ interceptor-ref> <Sult> /sucCess.jsp </ result> <result name = "error"> / error.jsp </sult> <result name = "input"> / index.jsp </cult> </ action>
Analyse principale:
un. L'interceptor FileUpload est responsable de la gestion des opérations de téléchargement de fichiers. Il s'agit d'un membre de la pile d'interceptor par défaut defaultstack. L'intercepteur a 3 propriétés qui peuvent être définies.
• MaximumSize: la longueur maximale du fichier téléchargé (en octets), la valeur par défaut est de 2 Mo
• AutorceTypes: les types qui permettent le téléchargement de fichiers, séparés par des virgules.
• Autoriser lestensions: permet de télécharger des extensions de fichiers. Ces 3 propriétés peuvent être écrasées dans le fichier strut.xml en séparant chaque extension.
né Le téléchargement de fichiers dépassant la taille ou illégalement provoquera une erreur (passez à une vue d'entrée)
passer:
<S: ActionError /> <S: feilderror /> pour afficher le message d'erreur
c. Modifier l'invite du message d'erreur en version chinoise: à l'aide de fichiers de ressources de message international
Si l'erreur est causée par la configuration des paramètres par défaut globaux, il est préférable d'utiliser le fichier de ressources de message global.
Le fichier de ressource invite par défaut pour Struts2: Struts-Message.Properties Fichier de Struts2-Core - **. Jar. Comparez simplement la valeur clé pour écraser la valeur correspondante.
La configuration est la suivante:
struts.sessages.error.uploading = ultor uploading: {0}
struts.messages.error.file.too.lARGE = fichier trop grand: {0} "{1}" "{2}" {3}
struts.sessages.error.content.type.not.allowed = contenu-type non autorisé: {0} "{1}" "{2}" {3}
struts.sessages.error.file.extension.not.allowed = extension de fichier non autorisé: {0} "{1}" "{2}" {3}
{0}: la valeur de l'attribut de nom dans <input type = "file" name = "uploadimage">
{1}: le vrai nom du fichier téléchargé
{2}: le nom du fichier de téléchargement enregistré dans le répertoire temporaire
{3}: Le type de fichier téléchargé (pour strut.sessages.error.file.too.large est la taille du fichier téléchargé)
Code source:
Modifiez les informations du fichier de ressources qui affiche l'erreur
Étape 1: Créez un nouveau fichier de ressources telles que FileUploadMessage.Properties, placez-la sous SRC pour ajouter les informations suivantes au fichier de ressource
struts.sessages.error.uploading = Erreur de téléchargement: {0}
struts.messages.error.file.too.lARGE = le fichier de téléchargement est trop grand: {0} "{1}" "{2}" {3}
struts.sessages.error.content.type.not.allowed = Le type de fichier téléchargé n'est pas autorisé: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = Le nom de suffixe du fichier téléchargé n'est pas autorisé: {0} "{1}" "{2}" {3}
Étape 2: Chargez le fichier de ressources dans le fichier strut.xml
<! - Configurer le fichier de ressources pour les informations d'erreur sur le téléchargement de fichiers ->
<constante name = "strut.custom.i18n.resources" value = "cn… .xxx.fileuploadMessage" />
2. Télécharger plusieurs fichiers
Télécharger plusieurs fichiers, vous pouvez utiliser des tableaux ou des listes, et d'autres sont similaires aux téléchargements de fichiers uniques.
package com.itheima.actions; import java.io.file; import java.io.ioexception; import org.apache.commons.io.fileutils; import org.apache.struts2.servletaccontext; import com.opensymphony.xwork2.actionSupport; // lime upload: up up uplower: Public Class uplatecaction2 étend des actions Actionupport {private usage nom de la chaîne de fichiers: nom de classe publique Upage2 étend des actions Actionupport {private usage. Fichier privé [] Photo; // cohérent avec le nom de champ de téléchargement du formulaire. Type est un fichier type.array ou liste private String [] PhotoFileName; // Téléchargez le nom de fichier String privé [] PhotoContentType; // Upload Fichier Mime Type public String upload () {// Upload Field: Upload dans un dossier. Enregistrez-le dans la chaîne du répertoire d'images de l'application realPath = servletActionContext.getServletContext (). GetRealPath ("/ images"); File Directory = nouveau fichier (realPath); if (! Directory.exists ()) {Directory.mkDirs (); } essayez {pour (int i = 0; i <Photo.length; i ++) {fileUtils.copyfile (photo [i], nouveau fichier (répertoire, photoFileName [i])); } Retour succès; } catch (ioException e) {e.printStackTrace (); Erreur de retour; }}}3. Téléchargement de fichiers
Principe: Struts2 fournit un type de résultat de flux, qui est un type de résultat de flux spécifié spécifiquement utilisé pour prendre en charge la fonction de téléchargement de fichiers. Il nécessite un paramètre InputName à spécifier. Ce paramètre spécifie un flux d'entrée et fournit l'entrée du fichier téléchargé.
Étapes de codage:
1) Action Class DownloadAction:
package com.itheima.actions; import java.io.file; import java.io.fileInputStream; import java.io.filenotfounException; import java.io.inputstream; import java.net.urlencoder; com.opensymphony.xwork2.ActionSupport; public class downloadAction étend ActionSupport {private inputStream Image; // Utiliser dans le nom de fichier de chaîne privé avec problème; // nom de fichier private long file size; public inputStream getImage () {return image; } public void setimage (INPUTSTREAM Image) {this.image = image; } public String getFileName () {return filename; } public long getFileSize () {return fileSize; } public String Download () lève une exception {// attribuer une valeur à l'image de la chaîne de flux FileRealPath = servletActionContext.getServletContext (). getRealPath ("/ web-inf / classes / 如 .jpg"); filename = filenameUtils.getName (filealPath); // Méthode 1: Le fichier chinois doit être encodé d'URL // filename = urlencoder.encode (nom de fichier, "utf-8"); FileSize = nouveau fichier (filealPath) .length (); System.out.println (nom de fichier); image = new FileInputStream (fileRealPath); retourner le succès; }}Struts.xml Fichier de configuration: configure principalement les résultats du type de flux
<struts> <constante name = "struts.devmode" value = "true" /> <constante name = "strut.ognl.allowstatingMethodaccess" value = "true" /> <action name = "download" metheth = "download"> <le résultat = "stream"> <param name = "intripName"> Image </ param> <! InputStream -> <param name = "ContentType"> Application / OCTET-Stream </Aram> <! - Dites à l'en-tête de réponse du navigateur, au format MIME du fichier et appelez la méthode GetContentType en action -> <! - Utilisez l'expression OGNL dans strut.xml pour obtenir la valeur de la propriété dans la classe d'action. Appelez getFileName () dans la classe d'action -> <! - Nom de fichier chinois Encodage: Méthode 2. Utilisez les expressions OGNL pour appeler la méthode statique d'Urlencode -> <! - Les appels OGNL par défaut ne peuvent pas être effectués. Vous devez activer un commutateur constant.struts.ognl.allowstatingMethodAccess = true -> <param name = "contentDisposition"> pièce jointe; filename = $ {@ java.net.urlencoder@encode (filename, 'utf-8')} </ param> <! - Tell the Browser comment télécharger -> <param name = "ContentLong </cult> </ action> </ package> </ Struts> L'intercepteur et le téléchargement de fichiers se terminent ici. C'est tellement fatigant, mais plein d'accomplissement.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.