Le premier est la partie Web, upload_file.jsp
<% @ Page Language = "Java" Image = "Java.util. *" Pageencoding = "UTF-8"%> <! > <form action = "uploadfile" method = "post" EncType = "multipart / form-data"> <! - Domaine de fichiers-> <entrée type = "file" name = "source" / </> input type = " soumettre "value =" upload "> </ form> </ body> </html>
Pour la forme de téléchargement du fichier, Metho doit être défini sur le poste et ENCTYPE doit être défini sur multipartiner / formulaire de forme.
À partir du code ci-dessus, vous pouvez voir que ce formulaire est soumis à la charge de téléchargement cette action pour la traiter.
<action name = "uploadfile"> <résultat name = "Success"> / uploadResult.jsp </cult> <! - Fileuploading, qui peut être utilisé pour limiter la taille du type et du document des documents de téléchargement-> <Internet- Nom ref. = "FileUpload"> <! - Limitez la taille du fichier 20m, l'unité est octet-> <seme name = "maximumSize"> 20971520 </param> </ interceptor-ref> <! - L'intercepteur par défaut doit être déclaré .
FileUpload Interceptor est utilisé pour configurer des chemins de téléchargement pour limiter les types de fichiers et la taille.
En ce qui concerne la taille du fichier, il n'est pas possible d'avoir <param name = "maximumSize" >> Vous devez l'ajouter sous la balise <Struts>
<constante name = "strut.multupart.maxsize" value = "21000000" /> />
Cette ligne de code indique la taille maximale de la taille du fichier autorisé à télécharger les fichiers dans l'ensemble du projet, c'est-à-dire que toute taille de fichier unique téléchargée dans ce projet ne peut pas dépasser 210000 octets (environ 20m). Le fichier qui est autorisé à être téléchargé par défaut est 2M, il s'agit donc également d'une méthode qui rompt les restrictions de fichiers 2M qui ne peuvent télécharger que des fichiers 2M.
En ce qui concerne le type de fichier, si vous devez le limiter en tant que fichier photo, vous pouvez le configurer comme celui-ci
<! - Configurez uniquement le téléchargement du fichier photo-> <intercepter-ref name = "fileupload"> <posm name = "allowingTypes"> image / bmp, image / x-png, image / gif, image / jpeg < / </ param> </ intercepter-ref> <interceptor-ref name = "defaultstack" /> />
La valeur dans l'étiquette est que la valeur du fichier est le type MIME, et le type MIME du fichier commun peut être trouvé dans% Tomcat_Home% / conf / web.xml.
Si vous souhaitez être limité au fichier Word, vous pouvez <térecedor> configuré comme celui-ci
<! - Settling permet uniquement à télécharger word document-> <intercepter-ref name = "fileupload"> <seme name = "allowingTypes"> application / msword, application / vnd.openxmlformats -offic educument.wordprocessingml.document </ param> < / intercepter-ref> <interceptor-ref name = "defaultstack" />
Cependant, j'ai l'impression que cela limite le type de fichier, il est préférable d'utiliser JavaScript pour implémenter des restrictions à l'avant.
Ensuite, écriture uploadAction, les attributs privés nécessaires nécessaires pour UploadAction sont Source, ce qui est cohérent avec l'attribut de nom du domaine de fichier dans upload_file.js p, c'est-à-dire que la valeur de propriété du nom du domaine de fichier est source, alors il y a notre ET , en outre, il y a deux autres attributs privés:
Chaîne privée SourceFileName;
Chaîne privée SourceContentType;
En résumé, c'est-à-dire, par exemple, le nom = "ABC" du domaine de champ chinois dans upload_file.jsp, alors cela doit être défini dans l'action
Fichier privé ABC; String privé ABCFileName;
ABC obtiendra automatiquement l'objet de fichier à télécharger, ABCFileName obtient automatiquement le nom du fichier et AbcConTType obtient automatiquement le type de fichier.
Je dois me concentrer sur le téléchargement des chemins.
S'il est téléchargé sur le chemin absolu, il est assez bon, mais si vous souhaitez télécharger dans le dossier de téléchargement dans le répertoire Root du projet, comment obtenir le chemin complet de ce dossier de téléchargement?
J'ai essayé d'utiliser
ServletActionContext.getServletContext ().
Mais est revenu nul. Également utilisé
ServletActionContext.getRequest ().
Toujours retourné à null. Mais en vérifiant ce problème en ligne, de nombreuses personnes recommandent une écriture, prouvant qu'elle peut être possible dans certains cas, mais il y a des gens qui reviennent à Null comme moi. Interface ServiceContextare. La méthode spécifique est la suivante:
La classe publique UploadAction étend ActionSupport ImvletContextare {/ ** * OMITIONNEMENT CODE ... * / PRIVE SERVELTCONNET CONTEXT; Void setServletContext (ServletContext Context) {this.context = context;}}
Puis utiliser
String Path = context.getRealPath ("/ upload");
Obtenez le chemin du dossier de téléchargement. Puis exécutez le téléchargement:
/ * Téléchargez le fichier dans le dossier de téléchargement * / fichier Saveful = new File (path, sourceFileName);
Je recommande personnellement cette méthode, car cette méthode semble éviter le chemin correct lorsque le projet est emballé et transféré dans d'autres environnements.
Collez le code complet de UploadAction dans le dos UploadAction.java
package com.lidi.action; La classe de téléchargement étend ActionSupport ImvletContextare {/ ** * / private static long ServiceVersionUID = 1l; Source de fichiers privé; Type du fichier Type du fichier Type Private ServLetContext Contexte; / Public getSource () {return source;} public void setsource (fichier source) {this.source = source; String getsourceContentType () {return SourceContentType;} public voidth e (String SourceContentType) {this.sourceContentType = SourceContentType;} @Override public Void setServletContext (ServiceTcontex * Obtenez le chemin du Fichier de téléchargement: Projet Root Dossier de téléchargement * / String Path; Dossier * / fichier SaveFile = nouveau fichier (Path, SourceFileName);
Télécharger la page des résultats uploadResult.jsp
<% @ Page Language = "Java" Image = "Java.util. *" Pageencoding = "UTF-8"%> <% @ taglib uri = "/ struts-tags" prefix = "s"%> <! Doctype html> <html> <éad- head> <itle> upload result </title> </ head> <body> <p> Nom du fichier: <s: propriété Value = "sourceFileName" /> </p> <p> Fichier Type: <S: Property Value = "SourceContentType" /> </p> <p> Fichier: <a href = "upload / <s: Property Value =" SourceFileName "/"> <S: Property = "SourceFi Lename" /> </a> </p> </ body> </html>
Ce qui précède est tout le contenu de cet article.