Préface
Lors du développement d'applications Web, nous devons fournir aux utilisateurs des fonctions de téléchargement, telles que le téléchargement d'une image en tant qu'avatar. Afin de télécharger des fichiers, nous devons définir la méthode du formulaire sur Publier et l'ENCTYPE sur multipart/form-data . Ce n'est que dans ce cas que le navigateur enverra les données binaires du fichier sélectionné de l'utilisateur sur le serveur. Cet article donnera un résumé détaillé de la fonction de téléchargement dans le cadre Struts2. Je ne dirai pas beaucoup ci-dessous, jetons un coup d'œil à l'introduction détaillée ensemble.
Téléchargement du fichier Struts2
Struts2 ne fournit pas son propre analyseur de demande, c'est-à-dire que Struts2 ne gèrera pas les demandes de données multipar / format en soi. Il doit appeler d'autres frameworks de téléchargement pour analyser les données de demande binaire, mais Struts2 résume en outre l'analyseur de téléchargement d'origine, simplifiant davantage le téléchargement de fichiers.
Dans le fichier de configuration de default.properties de Struts2, vous pouvez voir le code de configuration comme celui-ci:
### analyseur pour gérer les demandes de post HTTP, encodées à l'aide du multiparte / formulaire de type mime / format # strut.multing.parser = cos # struts.multuparts.parser = pell # strut.multips.parser = jakarta-streamstruts.multuparT.Parser = jakarta # utilise javax.Servlet.contex. defaultTrut.multupart.savedir = strut.multupar.maxsize = 2097152
Le code ci-dessus est principalement utilisé pour configurer l'analyseur de téléchargement lors du téléchargement de fichiers dans Struts2. L'encapsulation de Struts2 isole la différence entre les composants de téléchargement de fichiers sous-jacents. Tant que le résolveur est utilisé pour télécharger ce fichier de configuration, les développeurs peuvent facilement basculer entre les différents frameworks de téléchargement de fichiers.
Struts2 utilise l'analyse de téléchargement de Jakarta par défaut, bien sûr, si vous ne l'aimez pas, vous pouvez également passer à autre chose. Ce qui suit est une fonction de téléchargement de fichiers simple basée sur Struts2 via le code.
Implémenter l'action du téléchargement de fichiers
Page de réception:
<form action = "upload" metheth = "post" encType = "multipart / form-data"> title: <input type = "text" name = "title"> <br> file: <input type = "file" name = "upload"> <br> <input type = "soumed" value = "soumed"> </orm>
Classe d'action:
La classe publique UploadAction étend ActionSupport {Title de chaîne privée; téléchargement de fichiers privé; String privé uploadContentType; Private String uploadFileName; String privé SavePath; public void setsAvePath (String Value) {this.savePath = valeur; } private String getSavePath () {String realPath = servletACContext.getServletContext (). getRealPath ("/ web-inf /" + sauvepath); retourner realpath; } public void SettItle (String Value) {this.title = value; } public String getTitle () {return title; } public void setupload (fichier value) {this.upload = value; } public File getUpload () {return upload; } public void setuploadContentType (String Value) {this.uploadContentType = valeur; } public String getFileContentType () {return uploadContentType; } public void setuploadFileName (String Value) {this.uploadFileName = valeur; } public String getUploadFileName () {return uploadFileName; } @Override public String execute () lève une exception {fileoutputStream fos = new FileOutputStream (getSavePath () + "//" + getUploadFileName ()); FileInputStream fis = new FileInputStream (getUpload ()); octet [] tampon = nouveau octet [1024]; int len = 0; while ((len = fis.read (tampon))> 0) {fos.write (tampon, 0, len); } fis.close (); fos.close (); retourner le succès; }}Struts.xml Fichier de configuration:
<package name = "upload" étend = "struts-default"> <action name = "upload"> <param name = "SavePath"> / upload </ param> <result name = "Success"> / Success.jsp </sult> <result name = "intrigue"> / index.jsp </ result> </ action> </ package>
Pour les cours d'action, deux propriétés spéciales sont incluses:
Ces deux attributs sont utilisés pour résumer le nom de fichier du fichier téléchargé et le type de fichier du fichier téléchargé. Pour Struts2, si le formulaire de formulaire contient un champ de fichier avec l'attribut de nom xxx, l'action correspondante doit utiliser trois attributs pour résumer les informations du champ de fichier:
Grâce au processus de développement ci-dessus, nous pouvons voir qu'il est en effet une chose simple de télécharger des fichiers via Struts2. Ce que nous devons faire est d'associer le domaine de fichier avec une propriété du fichier de type en action, afin que nous puissions facilement accéder au contenu du fichier du fichier téléchargé. Quant à la façon dont Struts2 utilise l'analyseur multipar, il est complètement transparent pour les développeurs.
Implémenter manuellement le filtrage des fichiers
Plusieurs fois, les applications Web ne permettent pas aux utilisateurs de télécharger librement. Nous devons limiter le type de fichier et la taille du fichier téléchargés par les utilisateurs, de sorte que le filtrage des fichiers doit être effectué lors du téléchargement de fichiers. Maintenant, nous allons implémenter manuellement le filtrage de fichiers de téléchargement.
Configurez un nouveau paramètre dans strut.xml pour indiquer le type de téléchargement pris en charge:
<param name = "allowtypes"> image / png, image / gif, image / jpeg </ param>
Ajoutez une fonction de validation en action:
// Vérifiez @OverRidePublic void validate () {String FilterResult = filterType (getAllowTypes (). Split (",")); if (filterResult! = null) {addFielDerror ("upload", "Le type de fichier que vous souhaitez télécharger est incorrect!"); }} public String filterType (String [] types) {String FileType = getFileContentType (); for (String Type: Types) {if (type.equals (fileType)) {return null; }} Erreur de retour;} Cela implémente simplement le jugement de type, puis implémente la vérification de la taille en fonction de length() de la classe de fichiers. Mais c'est tellement gênant, parlons d'une déclaration plus simple.
Interceptor implémente le filtrage des fichiers
Struts2 fournit un intercepteur pour le téléchargement de fichiers, et le filtrage des fichiers peut être plus facilement réalisé en configurant un intercepteur. Filepload du téléchargement de fichiers dans Struts2. Pour que l'intercepteur fonctionne, il vous suffit de configurer la référence d'intercepteur dans l'action.
Lors de la configuration d'un intercepteur Fileupload, vous pouvez spécifier deux paramètres pour celui-ci:
<! - Configurer fileupload interceptor -> <interceptor-ref name = "fileupload"> <param name = "allowetTypes"> image / png, image / gif, image / jpeg </ param> <param name = "maximumSize"> 20000000 </ param> </ interceptor-ref> <! - Configurer l'interceptor par défaut du système -> <interceptor-ref name = "/ résultat du système ->> <Interceptor-ref name =" / résultat du System -'s Interceptor -> < name = "Success"> / Success.jsp </sultam>
De cette façon, la modification de la configuration peut être effectuée, ce qui est vraiment beaucoup plus facile que d'écrire un morceau de code.
Message d'erreur de configuration
Pour télécharger des erreurs, le système provoquera des messages d'erreur anglais par défaut. Cependant, afin de produire des messages invites internationaux, il est nécessaire d'ajouter les deux définitions de messages clés suivantes au fichier de configuration des ressources internationales:
struts.messages.error.content.type.not.allowed = Le type de fichier de téléchargement est incorrect, veuillez télécharger à nouveaustruts.messages.error.file.too.large = Le fichier que vous avez téléchargé est trop grand, veuillez le télécharger à nouveauEnsuite, vous pouvez utiliser <S: Fielderror /> pour publier le message d'erreur.
Configuration constante pour le téléchargement de fichiers
Au début de l'article, nous parlons de la configuration dans default.properties , qui a une configuration de struts.multipart.saveDir . Alors, quelle est la fonction spécifique de cet élément de configuration?
Pendant le processus de téléchargement de fichiers Struts2, un dossier temporaire doit être spécifié pour stocker des fichiers temporaires générés pendant le processus de téléchargement; Si aucun dossier temporaire n'est spécifié, le système est par défaut en utilisant javax.servlet.context.tempdir , sous le travail / catalina / localhost / chemin sous le chemin d'installation de Tomcat. Et cette struts.multupartipl.savedir configure l'emplacement de stockage des fichiers temporaires. Par conséquent, au cours du processus de développement, vous devez prêter attention à savoir si le répertoire a lu et rédigé des autorisations.
Il existe également une configuration de struts.multipart.maxSize , qui représente la taille du fichier téléchargé. Si la propriété maximale de cette configuration et la propriété MaximumSize de l'intercepteur Fileupload sont spécifiées en même temps, il se comparera d'abord avec la propriété maximale de struts.multipart.maxSize , puis de comparer avec la propriété maximale de l'intercepteur de fichiers. Si la taille du fichier dépasse la configuration maximale de struts.multipart.maxSize , une exception apparaîtra et le résultat ne sera pas transféré à l'entrée. Assurez-vous de faire attention à cela.
Résumer
Cet article résume en détail le téléchargement de fichiers dans Struts2. Il y a beaucoup de contenu, essentiellement tous les contenus du manuel. Eh bien, utilisez-le comme manuel.
D'accord, ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.