Tout d'abord, le chargement de fichier
Télécharger et télécharger des fichiers, sont caractéristique très courante dans de nombreux systèmes ou logiciels sont souvent utilisés pour télécharger et télécharger des fichiers
les fichiers téléchargés sont répartis dans les étapes suivantes:
1, page de couverture exige une forme d'étiquette, qui est une méthode de demandes de poste;
2, il faut ajouter dans la balise de propriété sous forme ENCTYPE et la valeur d'attribut doit être multipart / form-data valeur;
3, en utilisant le type d'entrée = balise de fichier sous la forme d'ajouter le fichier téléchargé;
4, le serveur de code d'écriture (programme Servlet) reçu par le processus de transfert de données.
notes:
1. La demande doit être post, parce que la demande get ayant une limite de longueur;
2. ENCTYPE = multipart / form-data représentent des données présentées sous la forme de plusieurs segments (un seul tableau pour chaque segment de données) épissé, puis envoyé au serveur sous la forme d'un flux binaire;
3. Les données doivent être reçues en streaming côté serveur;
En second lieu, les instructions pour télécharger les fichiers du protocole HTTP
Trois, communes-fileupload.jar API commune
Note : package commons-fileupload.jar repose commons-io.jar l'enveloppe, il est nécessaire d'introduire deux packages dans le projet.
1, API utilisée
Tableau FileItemFactory interface unique de l' usine
classe de téléchargement de fichiers de ServletFileUpload, pour des données analytiques Ajoutée
table de type d'élément FileItem, chaque élément de tableau représente
ServletFileUpload.isMultipartContent booléen (HttpServletRequest demande) détermine si les données en cours est un format téléchargement de multiples étapes, seulement une pluralité de morceaux de données d'utiliser cette méthode
liste publique <FileItem> parseRequest (HttpServletRequest demande) téléchargé l' analyse des données, la collecte de la liste de retour contient table individuelle
booléenne FileItem.isFormField () pour déterminer l'élément de forme actuelle, que ce soit une seule table ordinaire ou les fichiers téléchargés le type, vrai représente le type ordinaire de forme objet, false télécharger le type de fichier de
chaîne FileItem.getFieldName () Obtient la valeur de l' attribut nom de l' élément de forme
Chaîne FileItem.getString () Obtient la valeur de l'élément de forme actuelle;
Chaîne FileItem.getName () Obtient téléchargement nom de fichier
vide FileItem.write (fichier) pour télécharger des fichiers écrits sur l'emplacement du disque dur pointé par l'accès au fichier de paramètres
2, un organigramme
Quatrièmement, le cas
Télécharger le formulaire:
1 <form action = méthode "UploadServlet" = "post" enctype = "multipart / form-data">
2 用户名: <input type = nom de "texte" = "nom d' utilisateur" /> <br>
3 照片: <input type = nom "file" = "photo"> <br>
4 <input type = "submit" value = "上传">
5 </ form>
les données téléchargées parsing Servlet
1 importation org.apache.commons.fileupload.FileItem;
2 importation org.apache.commons.fileupload.FileItemFactory;
3 importation org.apache.commons.fileupload.disk.DiskFileItemFactory;
4 importation org.apache.commons.fileupload.servlet.ServletFileUpload;
5
6 import javax.servlet.ServletException;
7 importation javax.servlet.http.HttpServlet;
8 importation javax.servlet.http.HttpServletRequest;
9 importation javax.servlet.http.HttpServletResponse;
10 importation java.io.File;
11 importationjava.io.IOException,
12 est l' importation java.util.List,
13 est
14 publique classe UploadServlet extends le HttpServlet {
15 protégé vide le doPost (HttpServletRequest demande, la réponse HttpServletResponse) lancers francs ServletException, IOException {
16 // résoudre la distorsion chinoise
17. Request.setCharacterEncoding ( " . 8-UTF " )
18 est
19. // 1. abord déterminer si les données charger de multiples morceaux de données (plusieurs segments de données uniquement, le fichier est téléchargé)
20 est iF (ServletFileUpload.isMultipartContent (Request)) {
21 est
22 est // Créer classe d'implémentation d'usine FileItemFactory
23 est un FileItemFactory FileItemFactory = new new DiskFileItemFactory ();
24 // 2. Créez un outil analyse le téléchargement des données
25 ServletFileUpload ServletFileUpload = new new ServletFileUpload (FileItemFactory),
26 est
27 l'essai {
28 // 3. téléchargement de données analytiques, pour donner à chacun des tableau article FiltItem
29 Liste <la FileItem> List = servletFileUpload.parseRequest (Request);
30
31 est // cycle est déterminé, une table pour chaque élément, un type commun, ou le chargement du fichier
32 de (la FileItem FileItem: List) {
33 est
34 est // Formulaire ordinaire Point
35 IF(FileItem.isFormField ()) {
36 cordes la fieldName = fileItem.getFieldName ();
37 [ Chaîne value = fileItem.getString ( "UTF - 8". ),
38 est
39 System.out.println ( "nom d'attribut = item de la table de valeur" + le fieldName);
40 System.out.println ( "valeur de table individuelle valeur d'attribut =" + valeur);
41 est } else {
42 est // Télécharger le fichier
43 est le nom String = fileItem.getFieldName ();
44 est Enfilez le fieldName = FileItem .getName ();
45
46 est System.out.println ( "élément de formulaire valeur de l' attribut name =" + nom);
47 System.out.println ( "nom de fichier upload =" + le fieldName);
48
49 // écriture des données à l'emplacement spécifié
50 fileItem.write ( nouveau nouveau fichier ( "F .: \\" + fileItem.getName ()));
la figure 51 est }
52 est }
53 est
54 est } le cliquet (Exception e) {
55 e.printStackTrace ();
56 est }
57 est
58 }
59
60
61 }
Remarque:
Un tel téléchargement il y a un petit problème lors du téléchargement de plusieurs fichiers du même type avec le même nom, après avoir téléchargé un fichier remplacera les téléchargements de fichiers d'origine, afin de résoudre ce problème, vous pouvez ajouter millisecondes l'heure actuelle devant le nom du fichier qui est peut.
Empêcher la couverture du dossier, la banque de données peut être modifiée suite à une telle approche:
fileItem.write (nouveau fichier ( "F: \\" + System.currentTimeMillis () + fileItem.getName ()));