Téléchargement de fichiers
multipart/form-data<input type=“file”> doit être ajouté.<s: form action = "TESTUPLOAD" ENCTYPE = "multipart / form-data"> <s: textfield name = "username [0]" label = "user-1"> </ s: textfield> <s: file name = "photos" label = "photos"> </ s: file> <s: textfield name = "username [1]" label = "user-2"> </ s: textfield> label = "Photos"> </ s: fichier> <s: textfield name = "username [2]" label = "user-3"> </ s: textfield> <s: file name = "photos" label = "photo"> </ s: file> <s: soumider value = "soume"> </ s: soumed> </ s: form> form>
La classe publique UploadAction étend ActionSupport {@ seter @ Getter Private List <Fiché> Photos; @ Seter @ Getter Private List <string> PhotosContentType; @ Seter @ Getter Private List <string> PhotosFileName; @ Seter @ getter private list <string> nom d'utilisateur; Public String TesUpLoad () lève ioException {System.out.println ("username:" + username); System.out.println ("Photos:" + Photos); System.out.println ("PhotosFileName:" + PhotosFileName); System.out.println ("PhotosContentType:" + PhotosContentType); // Passez le fichier dans le fichier de téléchargement dans le répertoire racine du serveur // Obtenez servletContext servletContext servletContext = servletActionContext.getServletContext (); // Obtenez la chaîne de path réelle realPath = servletContext.getRealPath ("/ upload"); System.out.println (realPath); File uploadFile = nouveau fichier (realPath); // juger si le chemin existe si (! UploadFile.exists ()) {// Créer uploadFile.mkdir (); } pour (int i = 0; i <photos.size (); i ++) {uUid uuid = uuid.randomuuid (); FileUtils.copyfile (Photos.get (i), nouveau fichier (realPath + "/" + uuid + photosFileName.get (i))); } Retour succès; }}1. Combien de petits problèmes devraient être traités?
1. Le nom du fichier a un nom en double. Généralement, un UUID peut être généré avant le nom de fichier en tant que préfixe.
2. Limitez la taille d'un seul fichier
3. Restreindre les types de fichiers
4. Limitez la taille totale du fichier
2. L'interceptor FileUpload est fourni dans Struts2 pour définir ces valeurs d'attribut.
L'interceptor Fileupload a 3 propriétés qui peuvent être définies.
Remarque: Il y a une limite sur la taille totale des fichiers téléchargés dans Default.properties sous org.apache.struts2. Vous pouvez utiliser des constantes pour modifier cette limite Struts.multupart.maxsize = 2097152
<constante name = "struts.devmode" value = "true" /> <! - Modifiez la taille du fichier total ici -> <constante name = "strut.multupar.maxsize" value = "2097152" /> <package name = "default" namespace = "/" étend = "struts-default"> <intercepteur> <interceptor-stack name = "myInterceptor"> <interceptor> <interceptor-stack name = "MyInterceptor"> <interceptor> <interceptor-stack name = "MyInterceptor"> <interceptor> <ref name = "DefaultStack"> <! - Modifiez la taille d'un seul fichier, le composant Commons FileUpload accepte les fichiers téléchargés par défaut est 2M -> <param name = "FileUpload.MaxiMuSize"> 57,408 </ param> <! Files -> <param name = "fileupload.allowedextensions"> jpg, gif </ param> </ interceptor-ref> </ interceptor-stack> </ interceptors> <default-interceptor-ref name = "myInterceptor"> </ default-interceptor-ref> <action name name = "Success"> / Web-Inf / Views / Success.jsp </ result> <result name = "input"> / upload.jsp </ result> </ action> </ package>
1. Messages d'erreur liés au téléchargement de fichiers?
1. Les messages d'erreur liés au téléchargement de fichiers sont prédéfinis dans le fichier Struts-messages.properties.
2. Vous pouvez télécharger le fichier de ressources correspondant à l'action dans le fichier ou redéfinir le message d'erreur dans le fichier de ressources internationales I18N_ZH_CN.Properties
struts.sessages.error.file.too.large = Le fichier que vous déposez est trop grand strutsts.essages.error.content.type.not.allowed = erreur de fichier errut.sessages.error.file.extension.not.Allowed = Extension Struts.mesages.upload.error.SizeLeliteXedException = Total Fidre Exceceds
Téléchargement de fichiers
Dans certaines applications, il peut être nécessaire d'envoyer un fichier au navigateur de l'utilisateur dynamiquement, et le nom et l'emplacement de stockage du fichier sont imprévisibles lors de la programmation
Exemple de code
<a href = "TestDownload"> Télécharger </a>
classe publique téléchargementloadACTACT étend ActionSupport {// généralement les paramètres suivants seront fournis dans l'action @ seter @ getter private String ContentType; @ Seter @ Getter Private Long ContentLength; @ Seter @ Getter Private String ContentDisposition; @ Seter @ Getter Private InputStream InputStream; Public String TestDownload () lève FileToTFoundException, UnpportEnCcodingException {// Get ServletContext ServletContext ServletContext = servletActionContext.getServletContext (); // Obtenez le chemin de la chaîne de fichiers realPath = servletContext.getRealPath ("/ web-inf / file / au moins vous.mp3"); // Obtenez le flux du fichier inputStream = new FileInputStream (realPath); // Définissez le type de fichier contentType = servletContext.getMiMetype (realPath); // Obtenez la longueur du fichier contenuLength = nouveau fichier (realPath) .length (); // Définissez la chaîne de nom de fichier filename = "au moins vous.mp3"; filename = new String (filename.getBytes ("gbk"), "iso8859-1"); ContentDisposition = "attachement; filename =" + filename; retourner le succès; }}<! - Fichier Download -> <Action name = "TestDowload" Method = "TestDownload"> <Result Type = "Stream"> <! - File Buffer Size -> <Param Name = "BufferSize"> 2048 </param> </sult> </ Action>
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.