Lorsque vous travaillez dans des systèmes B / S, il implique généralement le téléchargement de fichiers et le téléchargement de fichiers. Avant de nous connecter au framework Struts2, nous utilisons le composant Fileupload du sous-projet Commons sous Apache pour télécharger des fichiers. Cependant, si nous faisons cela, le code semble lourd et inflexible. Après avoir appris Struts2, Struts2 fournit un meilleur mécanisme d'implémentation pour le téléchargement et le téléchargement de fichiers. Ici, je vais expliquer le code source pour le téléchargement de fichiers unique et le téléchargement multi-fichiers. Ici, nous devons importer deux fichiers JAR téléchargés par téléchargement de fichiers, l'un est Commons-fileupload-1.2.2.jar, et l'autre est commons-io-2.0.1.jar.
Struts2 Téléchargement de fichiers unique:
Tout d'abord, il existe une page de téléchargement de fichiers JSP. C'est relativement simple, c'est un formulaire avec une boîte de téléchargement de fichiers.
<! - Lors du téléchargement du fichier, la méthode de soumission de formulaire doit être publiée, car le fichier binaire peut être très important lors du téléchargement du fichier. Il y a aussi l'attribut enctype. Cet attribut doit être écrit en multiparte / format de formulaire, sinon il sera téléchargé sur le serveur dans le texte binaire -> <form action = "fileupload.action" metheth = "post" enctype = "username"> <br-data "> username: <entrée type =" text "name =" username "> <br> file: <upy type =" file "name =" file "> </ form>
Ensuite, la partie FileuploadAction du code. Parce que Struts2 fournit un bon mécanisme de stage pour le téléchargement et le téléchargement, nous avons seulement besoin d'écrire très peu de code en action:
classe publique FileUploadAction étend ActionSUpport {Private String Username; // Notez que le fichier ne fait pas référence au fichier lui-même téléchargé par le JSP frontal, mais le fichier téléchargé pour le stocker sous le fichier de fichier privé du dossier temporaire; // le nom du fichier soumis de file de chaîne privée FileFileName; // Le type MIME du fichier soumis de chaîne privée FileContentType; public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public file getFile () {return fichier; } public void setFile (fichier file) {this.file = file; } public String getFileFileName () {return fileFileName; } public void setFileFileName (String fileFileName) {this.fileFileName = fileFileName; } public String getFileContentType () {return fileContentType; } public void setFileContentType (String FileContentType) {this.fileContentType = fileContentType; } @Override public String execute () lève exception {String root = servletActionContext.getServletContext (). GetRealPath ("/ upload"); InputStream est = new FileInputStream (fichier); OutputStream OS = new FileOutputStream (nouveau fichier (root, fileFileName)); System.out.println ("FileFileName:" + FileFileName); // Parce que le fichier est un fichier stocké dans un dossier temporaire, nous pouvons imprimer son nom de fichier et son chemin de fichier pour voir s'il est le même que le fichier FileFileName System.out.println ("File:" + File.getName ()); System.out.println ("File:" + File.getPath ()); octet [] tampon = nouveau octet [500]; int length = 0; while (-1! = (longueur = is.read (tampon, 0, buffer.length))) {os.write (tampon); } os.close (); is.close (); retourner le succès; }}Tout d'abord, nous devons être clairs que le fichier ici ne fait pas vraiment référence au fichier téléchargé par JSP. Lorsque le fichier est téléchargé, Struts2 recherchera d'abord l'emplacement de stockage spécifié par struts.multupart.savedir (c'est en défaut.properties). Nous pouvons créer un nouveau fichier de propriété STUTS.Properties pour spécifier l'emplacement de stockage de fichiers temporaire. S'il n'est pas spécifié, le fichier sera stocké dans Apache-Tomcat-7.0.29 / Catalina / LocalHost / LocalHost de Tomcat. Ensuite, nous pouvons spécifier l'emplacement de stockage après le téléchargement du fichier et l'écrire simplement dans le flux via le flux de sortie. Pour le moment, nous pouvons voir le fichier que nous avons téléchargé dans le dossier.
Après avoir téléchargé le fichier, nous devons toujours le télécharger. En fait, le principe de téléchargement de Struts2 est très simple. Il s'agit de définir un flux d'entrée, puis d'écrire le fichier dans le flux d'entrée. La configuration de clé est toujours pour la configurer dans le fichier de configuration de strut.xml:
Le code FiledOwnloadAction est le suivant:
classe publique FiledOwnloadAction étend ActionSupport {public entréeStream GetdownloadFile () {return servletActionContext.getServletContext (). getResourCeasStream ("Upload / Address Book 4 septembre 2012.xls"); } @Override public String execute () lève une exception {return Success; }}Voyons que cette action définit simplement un flux d'entrée, puis lui fournit une méthode Getter. Ensuite, jetons un coup d'œil au fichier de configuration de strut.xml:
<action name = "filedownload"> <result name = "Success" type = "stream"> <param name = "contentDisposition"> attachement; filename = "Address Book 4 septembre 2012.xls" </ param> <param name = "inputName"> téléchargement de téléchargement </ param> </ result> </ action>
Il y a plusieurs choses auxquelles nous devons prêter attention dans le fichier de configuration Strut.xml. Tout d'abord, le type de résultat. Dans le passé, nous avons défini une action. Nous n'avons essentiellement pas écrit l'attribut de type dans le résultat, car il est par défaut pour demander le transfert (répartiteur). En plus de cet attribut, il existe généralement des valeurs telles que la redirection (redirection). Ici, parce que nous utilisons le téléchargement de fichiers, le type doit être défini comme le type de flux, en disant à l'action. Ceci est le résultat du téléchargement du fichier. Il y a généralement des sous-éléments param dans l'élément de résultat. Ceci est utilisé pour définir les paramètres lors du téléchargement du fichier. e Cette propriété est d'obtenir le flux d'entrée de fichier en action. Le nom doit être le même que l'attribut de flux d'entrée en action. Ensuite, l'attribut ContentDisposition est l'attribut ContentDisposition. Cette propriété est généralement utilisée pour spécifier comment nous souhaitons traiter le fichier téléchargé. Si la valeur est la pièce jointe, une boîte de téléchargement apparaîtra, permettant à l'utilisateur de choisir s'il faut télécharger. Si cette valeur n'est pas définie, le navigateur vérifiera d'abord d'ouvrir le fichier téléchargé. Si cela le peut, il ouvrira directement le fichier téléchargé (bien sûr, ce n'est pas ce dont nous avons besoin). Une autre valeur est le nom de fichier, qui est le nom de téléchargement du fichier invité par le fichier lors du téléchargement. Après avoir configuré ces informations, nous pouvons implémenter la fonction de téléchargement de fichiers.
STUTS2 Multipt Fichiers Téléchargez :
En fait, le principe du téléchargement multi-fichiers est le même que le téléchargement de fichiers unique. Un seul téléchargement de fichiers est un seul fichier, et une collection de liste <fichier> ou un tableau de fichier [] est téléchargée. Tout d'abord, jetons un coup d'œil au code de la partie JSP frontale. Ici, j'ai utilisé jQuery pour implémenter l'ajout de fichiers dynamiques et les boîtes de téléchargement de suppression dynamique:
<script type = "text / javascript" src = "script / jQuery-1.8.1.js"> </ script> <script type = "text / javascript"> $ (function () {$ ("# bouton"). Cliquez sur (function () {var html = $ ("<intrut type = 'file' name = 'file'>"); var bouton = $ ("" <put type = 'name =' file '> "); Value = 'Delete'> <br> "); $ (" # body div "). append (html) .append (Button); Button.click (function () {html.remove (); button.remove ();})})}) </ script> </ada> <body id =" body "> <form action =" fileupload2.action "méthode =" post " EncType = "multipart / form-data"> nom d'utilisateur: <input type = "text" name = "username"> <br> file: <input type = "file" name = "file"> <input type = "bouth" value = "add" id = "bouton"> <br> </ body> Les noms des fichiers doivent être nommés fichiers, puis le code d'action pour télécharger plusieurs fichiers est le suivant:
classe publique FileUploadAction2 étend ActionSUpport {Private String Username; // Ici, nous utilisons la liste pour stocker des fichiers téléchargés. Le fichier fait également référence aux fichiers temporaires dans des dossiers temporaires, plutôt qu'aux fichiers réellement téléchargés de la liste privée <fichier> fichier; // Cette liste stocke le nom du fichier, correspondant au fichier dans la liste <fichier> Liste privée <string> fileFileName; Liste privée <string> fileContentType; public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public list <Fich> getFile () {return file; } public void setFile (list <file> file) {this.file = file; } public list <string> getFileFileName () {return fileFileName; } public void setFileFileName (list <string> fileFileName) {this.fileFileName = fileFileName; } public list <string> getFileContentType () {return fileContentType; } public void setFileContentType (list <string> fileContentType) {this.fileContentType = fileContentType; } @Override public String execute () lève exception {String root = servletActionContext.getServletContext (). GetRealPath ("/ upload"); for (int i = 0; i <file.size (); i ++) {inputStream is = new FileInputStream (file.get (i)); OutputStream OS = new FileOutputStream (nouveau fichier (root, fileFileName.get (i))); octet [] tampon = nouveau octet [500]; @SuppressWarnings ("inutilisé") int length = 0; while (-1! = (longueur = is.read (tampon, 0, buffer.length))) {os.write (tampon); } os.close (); is.close (); } Retour succès; }}Cela l'écrit également dans un flux de sortie, afin que nous puissions voir plusieurs fichiers téléchargés dans le dossier
Le téléchargement du fichier suivant est exactement le même que le téléchargement du fichier tout à l'heure, et il en va de même pour strut.xml, donc je ne le répéterai pas ici.
Résumé: En général, le mécanisme de téléchargement et de téléchargement de fichiers fourni par Struts2 simplifie une grande partie de notre code. Nous pouvons utiliser ce mécanisme dans de futurs projets. Nous pouvons également utiliser le composant FileUpload pour télécharger des fichiers. Tout cela est déterminé par les préférences personnelles!
Il n'y a que tellement de contenu sur les fonctions de téléchargement de fichiers et de téléchargement dans Javaweb, merci pour votre lecture.