Environnement: Maven + Springmvc + Spring + Mybatis + MySQL
Cet article explique principalement comment utiliser l'entrée pour télécharger des fichiers dans le répertoire spécifié du serveur, ou les enregistrer dans la base de données; Comment télécharger des fichiers à partir de la base de données, afficher les fichiers d'image et atteindre la mise à l'échelle.
Stockez les fichiers dans une base de données, généralement un tableau d'octets qui stocke les fichiers, et le type de données de base de données correspondant est blob.
Tout d'abord, vous devez créer une base de données, ici vous utilisez la base de données MySQL.
Remarque: Le code donné dans l'article est principalement extrait et non complet.
1. Préparation
Utilisez Maven pour créer un projet SpringMVC + Spring + MyBatis + MySQL.
Pour comment intégrer le printemps + mybatis + mysql, voyez l'introduction de MyBatis et configurez MyBatis + Spring + MySQL:
Mybatis Learning One, Introduction et configuration de Mybatis Mybatis + Spring + MySQL
Pour la construction de l'environnement SpringMVC, veuillez consulter: Utiliser Eclipse pour construire le projet SpringMVC de Maven:
Construisez le projet SpringMVC de Maven à l'aide d'Eclipse
Au premier plan HTML, l'EnCtype de la forme est les données multipART / Form. Notez que le nom de l'entrée et de la sélection doit correspondre aux membres de StudentForm un par un.
L'URL téléchargée est addaction.do. Les paramètres de cette méthode d'action utilisent StudentForm pour cartographier les données soumises. À l'heure actuelle, les données du fichier soumis peuvent être obtenues. Ensuite, nous opérons sur le fichier.
Créez une table photo_tbl: le champ Photo_Data est utilisé pour stocker des fichiers, et le type est MyBatis LongBlob; Ensuite, écrivez le photomappeur d'interface Java du mappeur: y compris les ajouts, les suppressions, les modifications et les recherches; Fichier XML de Mappper: instructions SQL correspondant à l'interface Java.
Et le fichier de configuration de ressort doit ajouter une déclaration de bean.
Vous trouverez ci-dessous les extraits de code de HTML, Action et StudentForm; Créez le code d'interface SQL, Photomapper.java et le code de fichier Photomapapper.xml de la table photo_tbl.
1.1 Méthode d'écriture de formulaire HTML
1. <form action = "<c: url value = 'addaction.do' />" method = "post" Enctype = "multipart / form-data"> 2. <Bile> 3. <tr> 4. <td align = "droite"> Photo: </td> 5. <Td> <entrée type = "file" name = "StudentPhoto" /> 6. </r> 7. 9. </ form>
1.2 Méthode d'action
1./** 2. * Ajouté - Soumettre 3. * / 4. @ requestmapping (value = "addAction.do") 5.Public String add_action (modèle ModelMap, formulaire StudentForm) {6. 7.} 1.3 Classe StudentForm
1.Package liming.student.manager.web.model; 2. 3.Import org.springframework.web.multipart.Multupartfile; 4. 5.Public Class StudentForm étend GeneralForm {6. 7. Private String StudentName; 8. private int étudiantsex; 9. String Private Studentbirthday; 10. Private Multipartfile Studentphoto; 11. 12.} 1.4 Créer photo_tbl
1.Create Table Photo_TBL 2. (3. Photo_id Varchar (100) Clé primaire, 4. Photo_data Longblob, 5. File_name Varchar (10) 6.);
1.5 Interface photomappeur
1. @ Repository 2. @ Transactional 3. Public Interface PhotoMapper {4. 5. public void createPhoto (Photoentity Entity); 6. 7. public int deletephotobyphotoïde (Photoïde à chaîne); 8. 9. public int updatePhotoDate (@param ("Photoid") String Photoid, @param ("photodate") BYTE [] Photodate); 10. 11. Photo-ententité publique GetphotoentityByphotoid (String Photoid); 12. 13.} 1.6 Fichier Photomapper.xml
Y compris l'ajout, la suppression, la modification et la recherche. Le Photoid nouvellement ajouté utilise la fonction personnalisée MySQL pour générer automatiquement les clés primaires. Lorsque vous utilisez des Blobs, vous devez définir le type Handleur sur "org.apache.ibatis.type.blobtypeHandler. Les paramètres doivent être spécifiés plus tard lors de l'insertion et de la mise à jour, et ils doivent être spécifiés dans ResultMap.
1. <? Xml version = "1.0" Encoding = "UTF-8"?> 2. <! Doctype Mappeur public "- // mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3. namespace = "liming.student.manager.data.photoMapper"> 4. <resultmap type = "liming.student.manager.data.model.photoentity" id = "photomapapper_resultmap_photoentity"> 5. /> 6. <Result Property = "Photodata" chronn = "Photo_data" javatype = "byte []" jdbcType = "blob" typehandler = "org.apache.ibatis.type.blobtypeHandler" /> 7. 8. </cultMap> 9. 10. <insert id = "CreenEphoto" ParameterType = "liming.student.manager.data.model.photoentity"> 11. <SelectKey KeyProperty = "Photoid" resultType = "String" Order = "Before"> 12. Select Nextval ('Photo') 13. </lectKey> Photo_data, 16. File_name) 17. VALEURS (# {Photoid, jdbcType = varchar}, 18. # {Photodata, javatype = byte [], jdbcType = Blob, TypeHandler = org.apache.ibatis.type.blobTypeHandler}). 20. </serser> 21. 22. <delete id = "DelephotoByphotoid"> 23. Supprimer de Photo_TBL 24. Where Photo_id = # {Photoid, jdbcType = varchar} 25. </preaking> 26. 27. javatype = byte [], jdbcType = blob, typeHandler = org.apache.ibatis.type.blobtypeHandler}, 30. File_name = # {nom de fichier, jdbcType = varchar} 31. WHERE Photo_id = # {Photoid, jdbcType = id = "getPhotoentityByPhotoid" resultMap = "photomapper_resultmap_photoentity"> 35. Sélectionnez Photo_id, 36. Photo_data, 37. File_name 38. Depuis photo_tbl 39. WHERE PHOTO_ID = # {photoid, jdbcType = varchar} 40. 1.7 Fichier de configuration de ressort
Le fichier de configuration de Spring doit ajouter une déclaration d'org.springframework.web.multupart.commons.commonsMultipartreSolver.
1. <bean id = "MultipartreSolver"> 2. <Propriété name = "maxuploadSize" value = "1073741824" /> 3. </bant>
2. Mettez le fichier sur le serveur
1.Private Static Final String uploadFilePath = "D: // temp_upload_file //"; 2. 3./** 4. * Nouveau - Soumettre uniquement enregistre les fichiers au serveur 5. * / 6. @ requestmapping (value = "addAction.do") 7.Public String add_action (modèle ModelMap, formulaire StudentForm) {8.Try {9. MultiartFile uploadFile = form.getStudEntHoto (); 10. String filename = uploadFile.getoriginalFileName (); 11. InputStream est = uploadFile.getInputStream (); 12. // Si le serveur a déjà un fichier avec le même nom que le fichier de téléchargement, le message de l'invite est sorti 13. Fichier TempFile = nouveau fichier (uploadFilePath + FileName); 14. if (tempfile.exists ()) {15. booléen delresult = tempfile.delete (); 16. System.out.println ("Supprimer les fichiers existants:" + delResult); 17.} 18. // Commencez à enregistrer les fichiers sur le serveur 19. if (! Filename.equals ("")) {20. FileOutputStream fos = new FileOutputStream (uploadFilePath + filename); 21. Byte [] tampon = nouveau octet [8192]; // Lire 8k octets à chaque fois 22. int count = 0; 23. // Commencez à lire les octets du fichier téléchargé et à le sortir sur le flux de sortie du fichier téléchargé le serveur 24. While ((count = is.read (tampon))> 0) {25. Fos.Write (tampon, 0, count); // Écrivez un flux d'octet dans le fichier du serveur 26.} 27. Fos.Close (); // Fermer FileOutputStream Object 28. Is.close (); // l'objet InputStream 29.} 30.} Catch (filenotfoundException e) {31. E.PrintStackTrace (); 32.} Catch (ioException e) {33. E.PrintStackTrace (); 34.} 35.} 3. Téléchargez le fichier dans la base de données
1./** 2. * NOUVEAU - Soumettre et enregistrer le fichier dans la base de données 3. * / 4. @ requestmapping (value = "addAction.do") 5.Public String add_action (modèle ModelMap, formulaire StudentForm) {6. InputStream is = form.getStudentPhoto (). GetInputStream (); 7. Byte [] StudentPhotodata = nouveau octet [(int) form.getStudentPhoto (). GetSize ()]; 8. Is.read (StudentPhotodata); 9. String filename = form.getStudentPhoto (). GetoriginalFileName (); 10. Photoentité Photoentité = Nouveau Photoentité (); 11. Photoentity.setphotodata (StudentPhotodata); 12. Photoentity.SetFileName (nom de fichier); 13. This.photomapper.CreatePhoto (Photoentité); 14.} 4. Téléchargez le fichier
Pour télécharger le fichier, vous devez restaurer le tableau d'octets dans un fichier.
Tout d'abord, utilisez MyBatis pour découvrir le tableau d'octets dans la base de données et spécifier le nom de fichier (y compris le format). Utilisez ensuite OutputStream pour entrer le fichier
1. @ requestmapping (value = "downphotobyid") 2.Public void downphotobystudentid (String id, final httpservletResponse réponse) {3. Photoentity Entity = this.photoMapper.getPhotoentityByPhotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. String filename = entity.getFileName () == null? "Photo.png": entity.getFileName (); 6. FileName = UrLencoder.Encode (FileName, "UTF-8"); 7. Response.Reset (); 8. Response.sethEader ("Content-Disposition", "attachement; filename = /" "+ filename +" / ""); 9. Response.Addheader ("Content-Length", "" + Data.Length); 10. Response.SetContentType ("Application / OCTET-Stream; charSet = UTF-8"); 11. OutputStream OutputStream = new BufferedOutputStream (Response.getOutputStream ()); 12. OutputStream.Write (Data); 13. OutputStream.flush (); 14. OutputStream.close (); 15.}<a href = "<% = request.getContextPath ()%> / downphotobyid.do?id=8000001"> Téléchargez des photos </a>
5. Afficher le fichier d'image des octets
1. @ requestmapping (value = "getPhotoByid") 2.Public void getPhotoByid (String id, final httpservletResponse réponse) {3. Entity PhotEentity = this.photoMapper.getPhotoentityByPhotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. Response.SetContentType ("Image / JPEG"); 6. Response.SetcharAtterencoding ("UTF-8"); 7. OutputStream outroportsream = réponse.getOutputStream (); 8. InputStream dans = new ByteArrayInputStream (données); 9. Int len = 0; 10. octet [] buf = nouveau octet [1024]; 11. while ((len = in.read (buf, 0, 1024))! = -1) {12. Outportsream.write (buf, 0, len); 13.} 14. Outportsream.close (); 15.}<img src = "<% = request.getContextPath ()%> / getphotobyid.do?id=8000001" />
6. Échelle l'image par longueur et largeur égale proportion
1. @ requestmapping (value = "getPhotoid") 2.Public void getPhotobyId (String id, int largeth, int hauteur, final httpservletResponse réponse) {3. Entity Photoentity = this.photoMapper.getHotoentityByPhotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. if (largeur! = 0 && hauteur! = 0) {6. Data = ScaleImage (données, largeur, hauteur); 7.} 8. Response.SetContentType ("Image / JPEG"); 9. Response.SetcharAtterencoding ("UTF-8"); 10. OutputStream outroportsReam = Response.getOutputStream (); 11. InputStream dans = new ByteArrayInputStream (données); 12. int len = 0; 13. Octet [] buf = nouvel octet [1024]; 14. while ((len = in.read (buf, 0, 1024))! = -1) {15. 16.} 17. Outportsream.close (); 18.} 19. 20.Public Static Byte [] ScaleImage (Byte [] Données, Int Width, int Hight) lève IOException {21. BufferedImage Buffered_oldiage = ImageIo.Read (new ByteArrayInputStream (Data)); 22. Int imageoldwidth = buffered_oldiage.getWidth (); 23. Int imageoldHeight = buffred_oldiage.getheight (); 24. Double Scale_x = (double) largeur / ImageoldWidth; 25. double échelle_y = (double) hauteur / imageoldHeight; 26. double échelle_xy = math.min (scale_x, scale_y); 27. Int ImageNewWidth = (int) (imageoldwidth * scale_xy); 28. Int imagewheight = (int) (imageoldHeight * scale_xy); 29. BufferedImage Buffered_NewImage = new BufferedImage (ImageNewWidth, ImageNewHeight, BufferedImage.Type_int_rgb); 30. Buffered_NewImage.getGraphics (). Drawimage (Buffered_oldimage.getScaledInstance (ImageNewWidth, Imagenewheight, BufferedImage.Scale_Smooth), 0, 0, null); 31. Buffered_newimage.getGraphics (). Dispose (); 3. 33. ImageIo.Write (Buffered_NewImage, "JPEG", OutputStream); 34. Return outputStream.ToByTearray (); 35.}<img src = "<% = request.getContextPath ()%> / getphotobyid.do?id=8000001&width=300&height=300" />
Ce qui précède est la combinaison de MyBatis et SpringMVC pour implémenter les fonctions de téléchargement de fichiers et de téléchargement. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!