Le téléchargement de fichiers Java et le téléchargement de fichiers sont des fonctions relativement courantes dans le développement de programmes. L'article suivant vous présentera trois solutions pour implémenter le téléchargement de fichiers et le téléchargement dans Java. Les détails spécifiques sont les suivants;
Le premier point: le code Java implémente le téléchargement du fichier
FormFile file = manForm.getFile (); String newFileName = null; string newpathName = null; string fileaddre = "/ nup"; try {inputStream stream = file.getInputStream (); // lisez le fichier dans la chaîne filepath = request.getRealPath (fileadDre); // a ajouter la fonction de création de fichiers système actuelle (file (filepath); // ajoute la fonction de la fonction de la création automatique (Fichier) (Fichier) file1) .mkdir (); newFileName = System.CurrentTimemillis () + file.getFileName (). substring (file.getFileName (). LastIndexof ('.')); byteArrayOutputStream baos = new bytearrayoutputStream (); outputStream bos = new FileoutStream (filepath + "/" + " newFileName); newPathName = filepath + "/" + newFileName; System.out.println (newPathName); // Créer un flux de sortie pour le téléchargement de fichiers System.out.println (filepath + "/" + file.getFilename ()); int bytesread = 0; byte [] bubiter = new byte [8192]; while ((bytesread = stream.read (tampon, 0, 8192))! = -1) {bos.write (tampon, 0, bytesRead); // Écrivez le fichier sur le serveur} bos.close (); stream.close ();} catch (filenotfoundException e) {e.printStackTrace ();} catch (ioexception e) {e.printStackTrace ();}Le deuxième point: implémentez le téléchargement de fichiers sur la page JSP
package com.vogoal.util; import java.io.bufferedoutputStream; import java.io.file; import java.io.fileoutputStream; import java.io.ioexception; import java.text.simpledateformat; importer java.util.arraylist; import java.util.date; importation java.util.hashtable; javax.servlet.servletInputStream; Importer javax.servlet.http.httpservletRequest; classe publique jspfileupload {/ ** objet de demande * / privé httpservletRequest request = null; / ** chemin pour télécharger le dossier * / private string uploadPathe = null; / ** La taille de bytes est obtenue de temps * / Private Statise; / ** La taille des bytes est obtenue de temps * / Private Statise; / ** La taille de Bytes est obtenue de temps * / Private Statise; / ** La taille de Bytes est obtenue de temps * / Private Statise; 1024 * 8; / ** HashTable qui stocke les paramètres * / HashTable privé paramht = new Hasptable (); / ** ArrayList qui stocke le nom du fichier du fichier téléchargé * / private arrayList udfilearr = new ArrayList (); / *** définir l'objet de demande. * * @param request * httpServleRequest request Object * / public void setRequest (httpServLetRequest request) {this.request = request;} / *** définir le chemin de téléchargement du fichier. * * @param chemin * Le chemin de téléchargement du fichier spécifié par l'utilisateur. * / public void setuploadPath (String Path) {this.uploadPath = path;} / *** le programme principal pour le traitement de téléchargement de fichiers. ������b * * @return Int Operation Résultat 0 L'opération de fichier a été réussie; 1 L'objet de demande n'existe pas. 2 Le chemin d'enregistrement du fichier n'est pas défini ou le chemin d'enregistrement du fichier est incorrect; 3 * L'enctype correct n'est pas défini; 4 L'opération de fichier est anormale. * / public int process () {int status = 0; // Avant de télécharger le fichier, vérifiez l'objet de demande, téléchargez le chemin d'accès et ENCTYPE. status = preCheck (); // renvoie le code d'erreur lorsqu'une erreur se produit. if (status! = 0) Return Status; try {// �� paramètre ou nom de fichier �u���string name = null; // paramètre ValueString value = null; // si le flux de lecture est le bit de file de fichier bit booléen fileflag = false; // fichier à stocker. Fichier tmpfile = null; // le nom de la chaîne de fichiers téléchargée fname = null; fileoutputStream baos = null; tampheredoutputStream bos = null; // ��hashTableParamht = new hashTable (); updFillearr = new ArrayList (); int rtnpos = 0; �get contentTypestring contentType = request.getContentType (); int index = contentType.Indexof ("Boundary ="); String Boundary = "-" + contentType.SubString (index + 9); String endboundary = Boundary + "-"; // � procurez le flux de l'objet de demande. ServleTinputStream sis = request.getInputStream (); // Lire 1 ligne while ((rtnpos = sis.readline (buffs, 0, buffs.length))! = -1) {String strbuff = new String (buffs, 0, rtnpos); // lisez 1 ligne de données (if (nom! name.trim (). length ()> 0) {if (fileflag) {bos.flush (); baos.close (); bos.close (); baos = null; bos = null; updFilearr.add (fname);} else {objet obj = paramht.get (name); arraylist al = new ArrayList (); if (obj! (ArrayList) obj;} al.add (valeur); system.out.println (valeur); paramht.put (name, al);}} name = new String (); value = new String (); fileflag = false; fname = new String (); rtnpos = sis.readline (buffs, 0, Buff.Legth); String (buffs, 0, rtnpos); if (strbuff.tolowercase (). StartSwith ("contenu-disposition: form-data;")) {int nindex = strbuff.tolowercase (). strbuff.substring (nindex + 6, nlastIndex);} int finsex = strbuff.tolowercase (). indexof ("filename = /" "); if (finsex! = -1) {fileflag = true; int flastIndex = strbuff.tolowercase (). fllasTindex); fname = getFileName (fName); if (fname == null || fName.trim (). Length () == 0) {fileflag = false; sis.readline (buffs, 0, buffs.length); sis.readline (buffs.Length); continue;} else {fName = GetfileNameMytime (fname); sis.readline (baflame, 0, getFileBytime (fname); sis.readline (buffs, 0, getFileBytime (fname); sis.readLine (Buffs, 0, GetfileNametime (Fname); Sis.readLine (Buffs, 0, GetFileBytime (FNAME); Buffs.Length); sis.readline (buffs, 0, buffs.length);}}} else if (strbuff.startswith (endboundary)) {if (name! = null && name.trim (). length ()> 0) {if (fileflag) {bos.flush (); baos.close (); bos.close (); baos = null; bos; null; updFilearr.Add (fName);} else {objet obj = paramht.get (name); arrayList al = new ArrayList (); if (obj! = null) {al = (arrayList) obj;} al.add (value); paramht.put (name, al);}}} else {if (fileflag) {if (baOS == null {if (fileflag) {if (baOS == null {if (if (fileflag) {if (baOS == null) bos == null) {tmpFile = nouveau fichier (uploadPath + fname); baos = new FileOutputStream (tmpfile); bos = new bufferedoutputStream (baos);} bos.write (buffs, 0, rtnpos); baos.flush ();} else {System.out.Trin strbuff); value = value + strbuff;}}}} catch (ioException e) {status = 4;} return status;} private int preCcheck () {int errcode = 0; if (request == null) return 1; if (uploadPath == null || uploadPath.trim (). Length () == 0) return 2; else {file tmpf = new File (uploadPath); if (! tmpf.exists ()) return 2;} string contentType = request.getContentType (); if (contentType.indexof ("String / form-data") == -1) return 3; return errcode;} public getar-data ") == -1) return 3; return errCode; name) {string value = ""; if (name == null || name.trim (). length () == 0) return value; value = (paramht.get (name) == null)? "" :( String) ((arrayList) paramht.get (name)). get (0); name.trim (). length () == 0) renvoie null; if (paramht.get (name) == null) return null; arrayList al = (arrayList) paramht.get (name); string [] starr = new String [al.size ()]; for (int i = 0; i <al.size (); i ++) starr [i] = (String) al.get (i); getUpDFileSize () {return updFilearr.Size ();} public String [] getUpDFileNames () {String [] Strarr = new String [updFilearr.size ()]; for (int i = 0; i <updFilearrr.Size (); i ++) Strarr [i] = (String) updFilearrr.get (i); return strarr;} Strarr; getFileName (String Input) {int finsex = input.lastIndexof ("//"); if (finsex == -1) {finals = input.lastIndexof ("/"); if (FindEx == -1) {return input;}} input = input.substring (finsex + 1); return input;} private String GetFileNameBytime (string index) input.indexof ("."); date dt = new Date (); SimpledateFormat sdf = new SimpledateFormat ("yyyymmddhhmmsssss"); return input.substring (0, index) + sdf.format (dt) + input.substring (index);}}}2. Référence à la classe Java dans la page JSP:
<% @ page import = "com.vogoal.util.jspfileupload"%> <% // initialize jspfileupload jfu = new jspfileupload (); // définir l'objet de demande jfu.setRequest (request); // définir le traitement de fichier uploadé jfu.sepuploadPath ("C: //"); // upload Traitement INTRN = jfu.process (); // Obtenez les valeurs des autres paramètres de contrôle d'entrée dans le formulaire String username = jfu.getParameter ("username"); // s'il existe plusieurs contrôles d'entrée pour le même paramètre, renvoyez la chaîne de table jfu.getUpdFileNames (); // Obtenez le nombre de fichiers téléchargés, cette méthode est un peu inutile int fileNumber = jfu.getupdfilesize (); // Ce qui suit est la sortie de code pour le test. // out.println ("Paramètre:" + nom d'utilisateur); // out.println ("Taille du paramètre:" + usernamearr.length); // out.println ("Filearr size:" + filearr.length); // if (filearr.length> 0) // out.println ("filearr 0:" + filearr [0]);%>;Le troisième point: Struts2 implémente le téléchargement du fichier et le téléchargement
Étape 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/.
Étape 2: Définissez l'ECTYPE de la table de formulaire à: "Multipart / Form-Data", comme suit:
Code java
public class uploadAction {private file uploadImage; // Fichier private String uploadImageContentType; // Type de fichier String private uploadImageFileName; // Nom de fichier Private String BookName; // Nom de livre Private String Auteur; // Auteur Private String SavePath; // Fichier Save Location // Attribut Getter / Setter Method Upload upload () lance l'exception {// Implémentation du code up, i / o E compléte return "uploadsuccs"; }}Remarque: Le domaine de fichier dans un formulaire correspond à trois propriétés de l'action, à savoir le nom de fichier et le type de fichier. La dénomination est fixe. Le nom de fichier doit être le même que le nom de domaine du fichier dans le formulaire (uploadImage). Le nom de fichier est: fichier + nom de fichier et type de fichier: fichier + contentType.
Étape 4: Configurez notre action de téléchargement dans strut.xml.
Code java
<action name = "upload"> <param name = "SavePath"> / uploadfile </param> <sult> /success.jsp </cult> </ action>
Remarque: Pour spécifier le répertoire Enregistrer du fichier téléchargé sur le serveur, vous devez définir la variable SavePath dans UploadAction et ajouter les méthodes de setter et Getter correspondantes, afin que Struts2 puisse attribuer la valeur / uploadfile à l'attribut SavePath, c'est-à-dire pour utiliser la variable SavePath dans UploadAction, vous devez le définir en téléchargement.
Type de filtrage de fichiers de configuration manuelle
<param name = "allowtypes"> image / bmp, image / png, image / gif, image / jpeg </param>
Limite de taille de fichier de configuration manuelle
<param name = "maximumSize"> 1048576 </param>
Utilisez l'interceptor de téléchargement de fichiers de Struts2 pour implémenter le filtrage des fichiers
Struts2 fournit un intercepteur de téléchargement de fichiers - Fileupload. En configurant cet intercepteur, le filtrage des fichiers téléchargés peut être facilement réalisé.
Lors de la configuration d'un intercepteur Fileupload, vous pouvez spécifier deux paramètres pour celui-ci:
AutorceTypes: Spécifie le type de fichier qui est autorisé à être téléchargé, séparé par une virgule anglaise (,).
MaximumSize: spécifie la taille du fichier autorisée à télécharger en octets.
Astuce: En configurant un intercepteur de fichiers, vous pouvez facilement implémenter le filtrage de fichiers. Lorsque le filtrage des fichiers échoue, le système se transfère automatiquement vers la vue logique d'entrée. Par conséquent, la vue logique nommée entrée doit être configurée pour l'action. De plus, la référence interceptor de DefaultStack doit être configurée pour l'action.
Utilisez l'interception de Struts2 pour implémenter la configuration de filtrage de fichiers comme suit:
<action name = "uploadFileAction"> <interceptor-ref name = "defaultstack"> <! - Configurez le type de fichier autorisé à être téléchargé, séparé par plusieurs en utilisant "," -> <param name = "fileupload.ALLOWEDTYPES"> Image / BMP, image / png, image / gif, image / jpeg, image / jpg,, image, image, image, image, image, x-pNg, image / pjpeg <! Configurez la taille du fichier autorisé à être téléchargé, octets unitaires, cet exemple est: 1Mb -> <param name = "fileupload.maximize"> 1048576 </ param> </ interceptor-ref> <result name
Lorsque l'utilisateur ne parvient pas à télécharger, il y a un certain message rapide. Dans Struts2, utilisez la balise <S: Fielderror /> pour diffuser le message d'erreur sur la page.
Remarque: Si vous souhaitez utiliser des informations d'invite d'erreur Struts2, la classe d'action qui télécharge le fichier doit hériter de ActionSupport, sinon Struts2 ne fournira pas la fonction d'information d'invite d'erreur de sortie.
Nous pouvons configurer des fichiers de ressources (.properties) pour enregistrer la sortie d'informations à l'utilisateur.
Struts.Messages.eror.file.too.lARGE: Lorsque la taille du fichier de téléchargement dépasse la valeur définie, Struts2 sortira les informations d'invite correspondant à la touche.
struts.messages.error.content.type.not.allowed: Lorsque le type de fichier téléchargé ne répond pas à la valeur définie, Struts2 sortira les informations proches correspondant à la clé.
struts.sessages.error.uploading: Lorsqu'une erreur inconnue se produit lors du téléchargement d'un fichier, Struts2 sortira les informations rapides correspondant à la clé.
Nous devons également configurer le fichier de ressources dans le fichier strut.xml. Ensuite, nous devons afficher notre fichier de ressources. Il contient déjà du chinois. Nous devons le convertir puis le configurer en projet.
Définissez le fichier de ressources dans strut.xml:
<constante name = "strut.custom.i18n.resources" value = "messages" /> ou <constante name = "strut.custom.i18n.resources" value = "messages_zh_cn" />
Utilisez la commande native2ascii d: /messages.properties d: /mesages_zh_cn.properties pour convertir le fichier de ressource d'origine en celles prises en charge.
Remarque: Gardez l'international, le suffixe de nom du fichier de ressources est: * _zh_cn + extension de fichier.
Le principe de téléchargement de plusieurs fichiers est le même que ci-dessus, mais il convient de noter que les noms d'attribut de nom de plusieurs champs de fichiers doivent être les mêmes, et en action, le fichier [] ou la liste <fichier> doit être utilisé pour le recevoir.
Je pense personnellement que l'utilisation de cette méthode pour télécharger plusieurs fichiers n'est pas
très bien.
Struts2 pour le téléchargement de fichiers
Struts2 fournit un type de résultat de flux, qui est spécifiquement utilisé pour prendre en charge le téléchargement de fichiers. Lorsque vous spécifiez le type de résultat du flux, un paramètre InputName doit être configuré, qui spécifie un flux d'entrée, qui est l'entrée du fichier téléchargé (c'est-à-dire que le fichier peut être téléchargé dans un flux via cette entrée).
Implémenter l'action du téléchargement de fichiers
classe publique FiledOwnloadAction implémente Action {// Cette valeur de propriété est spécifiée dans le fichier de configuration. Struts2 injectera automatiquement (c'est-à-dire attribuer une valeur). Vous devez fournir les méthodes de setter et Getter Private String InputPath; // spécifiez le chemin complet du fichier à télécharger (nom de chemin + nom de fichier) / * * La classe d'action qui implémente le téléchargement doit fournir une méthode pour renvoyer une instance InputStream. La valeur de propriété InputName correspondante dans <Result ... // public inputStream getTargetFile () lève l'exception {return servletActionContext.getServletContext (). GetResourceStream (inputPath); } // La méthode EXECUTE qui gère les demandes de l'utilisateur, qui renvoie la chaîne de réussite publique Exécute () lève l'exception {return "Success"; }}La configuration d'action correspondante dans le fichier strut.xml
<action name = "download"> <! - Spécifiez l'emplacement de la ressource téléchargée -> <param name = "inputPath"> / uploadFile / Demo.txt </ param> <! - Configurez le type de résultat en tant que flux -> <résultat Name = "Success" type = "Stream"> <! Fichier -> <param name = "InputName"> TargetFile </param> <! - Spécifiez la méthode de téléchargement du fichier téléchargé et le nom de fichier enregistré au moment du téléchargement. Le nom du fichier lors de l'enregistrement du fichier doit avoir une extension, et l'extension indique l'icône du type de téléchargement -> <param name = "ContentDisposition"> Pièce jointe; filename = struts2.txt </param> <! - Spécifiez la taille du tampon du fichier téléchargé -> <param name = "Buffersize"> 4096 </ param> </sult> </ Action>
Ce qui précède sont les trois solutions pour implémenter le téléchargement de fichiers et le téléchargement dans Java présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!