En général, il existe deux façons de télécharger des images. L'un consiste à écrire le fichier image dans la base de données, et l'autre est de le stocker dans le répertoire des fichiers du serveur. Les fichiers d'image écrits dans la base de données doivent être convertis en format de flux binaire, occupant l'espace de la base de données et conviennent au stockage d'un petit nombre d'images. Par exemple, certaines petites icônes du système ont l'avantage d'écrire dans la base de données qu'ils sont relativement sûrs et ne sont pas facilement supprimés par les utilisateurs accidentellement.
Si vous stockez un grand nombre d'images, cela est généralement fait pour les enregistrer dans un dossier sur le serveur. Il existe de nombreuses façons de terminer le téléchargement, vous pouvez utiliser la méthode de streaming et la méthode FTP, et la méthode Fileupload est utilisée ici.
Avec différentes tailles de système, les méthodes de traitement des fichiers image sont également différentes. Si le nombre d'images dans le système n'est pas grand, stockez simplement toutes les images du même répertoire. Si les images s'accumulent davantage, vous pouvez classer et stocker les images en fonction de la classification des matériaux, qui fera gagner du temps dans la recherche de fichiers sur le disque.
Lorsque vous téléchargez des images dans des fichiers, vous pouvez télécharger des images directement dans le répertoire, vous pouvez également écrire le nom de fichier image et le chemin du fichier vers la base de données, ou vous pouvez créer dynamiquement des chemins de fichier dans le programme. Si la société nécessite que les images soient stockées sur un serveur spécial, il est plus approprié d'écrire le chemin du fichier vers le fichier complet. Généralement, il est plus facile de traiter si un matériau (matériau) correspond à une image. S'il correspond à plusieurs images, elle doit être utilisée en conjonction avec Recycle. D'une part, il est nécessaire de traiter l'affichage dynamique de l'image, et d'autre part, il est nécessaire de vérifier si la dénomination du fichier d'image est dupliquée. De plus, lors du traitement des images (téléchargement, supprimer et modifier), vous devez coopérer avec les transactions.
Ce qui suit est une introduction clé à l'implémentation la plus élémentaire de l'utilisation de Fileupload pour obtenir le téléchargement d'image.
1. Utilisez des balises de fichier à l'avant:
<input name = "filename" type = "file" class = "text1" size = "40" maxLength = "40">
2. Définissez le format ENCTYPE du fichier: Multipart / Form-Data
<form name = "itemform" cible = "_ self" id = "itemform" metheth = "post" action = "servlet / item / fileuploadservlet" enctype = "multipart / form-data">
Instructions sur ENCTYPE = "Multipart / Form-Data":
Si ce format est utilisé dans JSP, le servlet correspondant ne peut pas utiliser request.getParameter () pour obtenir des paramètres. Vous devez utiliser la méthode Parerequest de l'objet ServletFileUpload pour d'abord analyser les données de l'objet de demande, puis utiliser l'indicateur ISformField de l'élément analysé et coopérer avec la méthode GetFieldName pour obtenir les données.
3. Implémentation de FileUploadServlet:
package com.bjpowernode.drp.baseData.web; Importer java.io.file; Importer java.io.ioException; Importer java.util.iterator; Importer java.util.list; Importer javax.servlet.servletException; import javax.servlet.http.httpservlet; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import org.apache.commons.fileupload.fileItem; import org.apache.commons.fileupload.disk.diskfileItemfactory; import org.apache.commons.fileupload.servlet.servletFileUpload; import com.bjpowernode.drp.baseddata.manager.itemManager; import com.bjpowernode.drp.baseddata.manager.itemManageImpl; Importer com.bjpowernode.drp.util.ApplicationException; classe publique FileUploadServlet étend AbstractItemServlet {Private File uploadPath; Fichier privé Temppath; @Override public void init () lève Servlexception {// Lorsque le système démarre, démarrez l'initialisation. Pendant l'initialisation, vérifiez si le dossier où l'image est téléchargée et le dossier où les fichiers temporaires sont stockés existe. S'il n'existe pas, créez // obtenez le chemin physique réel correspondant au répertoire racine uploadPath = nouveau fichier (getServletContext (). GetRealPath ("upload")); System.out.println ("uploadPath ====" + uploadPath); // Si le répertoire n'existe pas si (! UploadPath.exists ()) {// Créer le répertoire uploadPath.mkdir (); } // Directory temporaire // file tempfile = new File (item.getName ()) Construisez l'objet temporaire temppath = new file (getServletContext (). GetRealPath ("temp")); if (! temppath.exists ()) {temppath.mkdir (); } // Si la méthode de la classe parent n'est pas affichée, il n'y aura pas d'instance ItemManager, qui provoquera un pointeur nul super.init (); } public void doGet (demande httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {doPost (request, réponse); } public void doPost (httpsservletRequest request, httpservletResponse réponse) lève ServletException, ioException {// obtenir des données de item_upload.jsp, car le format d'encodage de la page téléchargée est différent de la généralité, en utilisant ENCTYPE = "Multiart / Form-Data" // Form Soumission Use req.getParameter () // String itemno = req.getParameter ("itemNo"); //System.out.println("Itemno====== "+ itemno); / ***************************************. Dans cette classe d'usine, vous pouvez configurer la taille du tampon de mémoire et le répertoire où les fichiers temporaires sont stockés. DiskfileItemfactory factory = new DiskFileItemFactory (); // Taille maximale qui sera stockée dans Memory Factory.SetSizethReshold (4096); // l'emplacement pour enregistrer des données plus grandes que getIzethReshold () factory.setRepository (TEMPPATH); // ServletFileUpload: responsable du traitement des données de fichiers téléchargées et encapsulant chaque partie des données dans un objet FileItem. // Lorsque vous recevez des données de fichiers téléchargées, le contenu sera enregistré dans le cache de mémoire. Si le contenu du fichier dépasse la taille du tampon spécifié par diskfileItemFactory, // Le fichier sera enregistré sur le disque et stocké sous forme de fichier temporaire dans le répertoire spécifié de DiskFileItemFactory. // Une fois les données de fichier reçues, ServLetUpload écrit les données du fichier dans le fichier dans le répertoire de fichiers téléchargé ServletFileUpload upload = new ServletFileUpload (Factory); // taille maximale avant qu'un fichierploadexception ne soit lancé upload.setsizemax (1000000 * 20); / ***************. String itemno = ""; // iterator iter = fileItems.iterator () Prenez son iterator //iter.hasnext () Vérifiez s'il y a des éléments dans la séquence pour (iterator iter = fileItems.iterator (); iter.hasnext ();) {// Obtenez l'élément suivant dans la séquence FileItem item = (fileItem) iter.next (); // juge s'il s'agit d'informations de fichier ou de texte // Il s'agit d'un champ de saisie de formulaire ordinaire if (item.isformField ()) {if ("itemno" .equals (item.getFieldName ())) {itemno = item.getString (); }} // est le champ de saisie if if (! Item.isformField ()) {// Le nom et le chemin complet de la chaîne de fichiers téléchargée fileName = item.getName (); Long Size = item.getSize (); // Déterminez si le fichier est sélectionné if ((filename == null || filename.equals ("")) && size == 0) {continue; } // Intercepter la chaîne telle que: c: /windows/debug/passwd.log filename = filename.substring (filename.lastIndexof ("//") + 1, filename.length ()); // Enregistrez le fichier sur le disque physique du serveur: le premier paramètre est: le chemin complet (à l'exclusion du nom du fichier). Le deuxième paramètre est: Nom de fichier //item.write(file); // Modifiez le nom du fichier et le nom du matériel est le même, et l'extension de fichier est forcée d'être gif //item.write(New File (uploadPath, itemno + ".gif")); // Enregistrez le fichier dans le répertoire sans modifier le nom de fichier item.write (nouveau fichier (uploadpath, nom de fichier)); // Écrivez le nom du fichier d'image dans la base de données itemManager.uploadItemage (itemNo, nom de fichier); }} Response.SenDredirect (request.getContextPath () + "/ servlet / item / SearchItemServlet"); } catch (exception e) {e.printStackTrace (); Jetez une nouvelle application enception ("Upload a échoué!"); }}} Cette classe hérite de l'AbstractItemServlet: la classe parentale abstraite de tous les servlets matériels, responsable de l'instanciation de l'observateur
/ ** * La classe Parent abstraite de tous les servlets matériels est responsable de l'instanciation de l'élémentManager * @author limin * * / public abstrait class AbstractItemServlet étend httpservlet {// Bien qu'il ne soit pas thread-saafer, s'il est en lecture seule, il n'y aura pas d'erreurs Protected ItemManager ItemManager = Null; @Override public void init () lève ServletException {itemManager = new ItemManageImpl ()}}ITEMMANAGERIMP est une sous-classe qui implémente l'interface ItemManager. Il y a un problème avec ce modèle de conception, qui a une optimisation de salaire, mais ici, nous ne ferons aucune remarque non pertinente pour expliquer le téléchargement d'images.
Résumer:
À propos de la méthode d'initialisation init ():
Lorsque le servlet est initialisé, le répertoire est créé dynamiquement. Voici un téléchargement et un fichier temporaire TEMPPATH vers le projet et le répertoire sous WebApps de Tomcat.
Il convient de noter que la méthode super.init () doit être appelée ici (Super n'est pas une référence à l'objet de classe parent, mais est responsable de l'appel à la méthode de la classe parent), sinon, il peut provoquer un pointeur nul vers la classe.
Le téléchargement est à peu près effectué en trois étapes: utilisez le composant Fileupload pour analyser le formulaire; analyser les données transmises par le formulaire et renvoyer le type de données de collecte de liste: FileItem; Enfin, téléchargez l'image.
Utilisez la méthode ISformField () de FileItem pour déterminer s'il s'agit d'un texte normal ou d'un fichier;
Utilisez FileItem.Write (nouveau fichier (uploadpath, nom de fichier)) pour télécharger le fichier. Le premier paramètre est: le chemin complet (à l'exclusion du nom du fichier). Le deuxième paramètre est: le nom de fichier;
Traitement des données de texte normales:
if ("itemno" .equals (item.getFieldName ())) {itemNo = item.getString (); }Le téléchargement est une technologie relativement mature depuis de nombreuses années, et il y en a beaucoup de cadrages que nous pouvons utiliser directement dans nos projets quotidiens, mais comprendre certains principes de base est essentiel.
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.