Umgebung: Maven + SpringMVC + Spring + MyBatis + Mysql
In diesem Artikel wird hauptsächlich erläutert, wie die Eingaben zum Hochladen von Dateien in das angegebene Verzeichnis des Servers oder in der Datenbank gespeichert werden. So laden Sie Dateien aus der Datenbank herunter, zeigen Sie Bilddateien an und erreichen Sie Skalierung.
Speichern Sie Dateien in einer Datenbank, im Allgemeinen ein Byte -Array, das Dateien speichert, und der entsprechende Datenbankdatentyp ist Blob.
Zunächst müssen Sie eine Datenbank erstellen, hier verwenden Sie die MySQL -Datenbank.
HINWEIS: Der im Artikel angegebene Code ist größtenteils ausgetauscht und nicht vollständig.
1. Vorbereitung
Verwenden Sie Maven, um ein SpringMVC+Spring+MyBatis+MySQL -Projekt zu erstellen.
So integrieren Sie Spring+MyBatis+MySQL, finden Sie in der Einführung von MyBatis und konfigurieren Sie MyBatis+Spring+MySQL:
Mybatis lernt eine, Einführung und Konfiguration von mybatis mybatis + fing + mySQL
Für den Bau der SpringMVC -Umgebung finden Sie unter: Verwenden Sie Eclipse, um das SpringMVC -Projekt von Maven zu bauen:
Erstellen Sie das SpringMVC -Projekt von Maven mit Eclipse
Im Vordergrund-HTML ist der Engpy of Form von mehrteiler/Formdaten. Beachten Sie, dass der Name der Eingabe und der Auswahl den Mitgliedern von studentForm nacheinander entsprechen sollte.
Die hochgeladene URL ist AddAction.do. Die Parameter dieser Aktionsmethode verwenden StudentForm, um die übermittelten Daten zuzuordnen. Zu diesem Zeitpunkt können die Daten der eingereichten Datei erhalten werden. Dann arbeiten wir mit der Datei.
Erstellen Sie eine Tabelle foto_tbl: Das Feld photo_data wird zum Speichern von Dateien verwendet, und der Typ ist myBatis longblob; Schreiben Sie dann die Java -Schnittstelle des Mapper Photomapper: einschließlich Ergänzungen, Löschungen, Modifikationen und Suchanfragen; MAPPPER -XML -Datei: SQL -Anweisungen, die der Java -Schnittstelle entsprechen.
Und die Federkonfigurationsdatei muss eine Bean -Deklaration hinzufügen.
Im Folgenden finden Sie die Codeausschnitte von HTML, Action und StudentForm. Erstellen Sie den Schnittstellencode von SQL, Photomapper.java und Photomapper.xml Dateicode der Tabelle fotothoth und tabbl.
1.1 HTML Form Writing -Methode
1. <form action = "<c: url value = 'addAction.do'/>" methode = "post" engType = "MultiPart/Form-Data"> 2. <Tabelle> 3. <tr> 4. <Td align = "rechts"> Foto: </td> 5. 9. </Form>
1.2 Aktionsmethode
1./** 2. * hinzugefügt - Senden 3. */ 4.@requestmaping (value = "addAction.do") 5.public String add_action (ModelMap -Modell, studentForm -Formular) {6. 7.} 1.3 Klasse für Schülerform
1.Package liming.student.Manager.Web.Model; 2.Import org.springframework.web.multipart.multiPartFile; 4. 5. public class studentForm erweitert GeneralForm {6. 7. private String studentName; 8. Private int studentSex; 9. Private String StudentBirthday; 10. Private MultipartFile StudentPhoto; 11. 12.} 1.4 Erstellen Sie foto_tbl
1. create table foto_tbl 2. (3. foto_id varchar (100) Primärschlüssel, 4. Photo_data longblob, 5. Datei_Name varchar (10) 6.);
1.5 Photomapper -Schnittstelle
1.@repository 2.@transactional 3.public interface Photomapper {4. 5. public void createphoto (PhotoEntity Entity); 6. 7. Public Int DeletePhotobyphotoid (String Photoid); 8. 9. Public int updatePhotodat (@param ("photoid") String photoid, @param ("fotodat") Byte [] fotoodat); 10. 11. öffentliche Photoentität getphotoEntityBypHotoid (String -Photoid); 12. 13.} 1.6 Photomapper.xml -Datei
Einschließlich Addition, Löschen, Änderungen und Suche. Das neu hinzugefügte Photoid verwendet die mySQL -benutzerdefinierte Funktion, um automatisch Primärschlüssel zu generieren. Beim Betrieb von Blobs müssen Sie den TypeHandler auf "org.apache.ibatis.type.blobTypeHandler" festlegen. Die Parameter müssen später beim Einfügen und der Aktualisierung angegeben werden, und sie müssen in resultMap angegeben werden.
1. <? namespace = "liming.student.Manager.data.photomapper"> 4. <resultmap type = "liming.student.Manager.data.model.photoEntity" id = "photomapper_resultmap_photoentity"> 5. /> 6. <result properation = "photodata" column = "photo_data" javatype = "byte []" jdbctype = "bloB" typeHandler = "org.apache.ibatis.type.blobTypeHandler" /> 7. </resultMap> 9. 10. <insert id = "createphoto" parameterType = "liming.student.Manager.data.model.photoentity"> 11. Photo_data, 16. Datei_name) 17. Werte ( #{photoid, jdbctype = varchar}, 18. #{photodata, javatype = byte [], jdbctype = BLOB, typeHandler = org.apache.ibatis.type.bloboBtypeShandler = # #{filename, jdbCtypeMandler}, 19. 19. 19. 20. </einfügen> 21. 22. <delete id = "DeletePhotobypHotoid"> 23. Löschen von foto_tbl 24. wob javatype = byte [], jdbctype = blob, typeHandler = org.apache.ibatis.type.blobTypeHandler}, 30. file_name = #{fileName, jdbctype = varchar} 31. wob id = "GetPhotoEntityBypHotoid" resultMap = "Photomapper_Resultmap_photoentity"> 35. Wählen Sie Foto aus, 36. photo_data, 37. File_Name 38. Von Photo_tbl 39. WHERE FOTO_ID = {Photoid, jdbctype = varchar} 40. 1.7 Federkonfigurationsdatei
Die Frühlingskonfigurationsdatei muss eine Erklärung von org.springframework.web.multipart.commons.Commonsmultipartresolver hinzufügen.
1. <bean id = "multipartresolver"> 2. <Eigenschaft name = "maxUploadsize" value = "1073741824" /> 3. < /bean>
2. Setzen Sie die Datei auf den Server
1.Private statische endgültige String -Uploadfilepath = "D: // temp_Upload_file //"; 2./. 10. String Dateiname = UploadFile.getOriginalFileName (); 11. InputStream ist = uploadFile.getInputStream (); 12. // Wenn der Server bereits eine Datei mit demselben Namen wie die Upload -Datei hat, wird die Eingabeaufforderung ausgabe 13. Datei tempfile = neue Datei (UploadFilePath + Dateiname); 14. if (tempfile.exists ()) {15. boolean delresult = tempfile.delete (); 16. System.out.println ("Vorhandene Dateien löschen:" + delresult); 17.} 18. // Speichern Sie Dateien auf dem Server 19. if (! Dateiname.equals ("")) {20. FileOutputStream fos = new FileOutputStream (UploadFilePath + Dateiname); 21. Byte [] Buffer = neues Byte [8192]; // Lesen Sie jedes Mal 8K -Bytes 22. int count = 0; 23. // Lesen Sie die Bytes der hochgeladenen Datei mit und geben Sie sie auf den Server aus, den Dateiausgabe Stream 24. // Byte -Stream in die Serverdatei 26.} 27. fos.close (); // FileOutputStream -Objekt 28. is.close (); // InputStream -Objekt 29.} 30.} catch (FilenotFoundException e) {31. E. printstacktrace (); 32.} catch (ioException e) {33. E. printstacktrace (); 34.} 35.} 3. Laden Sie die Datei in die Datenbank hoch
1./** 2. * Neu - Datei in der Datenbank senden und speichern. 7. byte [] studentPhotodata = new Byte [(int) Form.GetStudentPhoto (). GetSize ()]; 8. is.read (StudentPhotodata); 9. String Dateiname = Form.GetStudentphoto (). GetOriginalFileName (); 10. PhotoEentity PhotoEentity = new PhotoEentity (); 11. PhotoEentity.Setphotodata (StudentPhotodata); 12. PhotoEentity.SetFileName (Dateiname); 13. this.photomapper.Createphoto (FotoEntity); 14.}
4. Laden Sie die Datei herunter
Um die Datei herunterzuladen, müssen Sie das Byte -Array in einer Datei wiederherstellen.
Verwenden Sie zunächst MyBatis, um das Byte -Array in der Datenbank herauszufinden, und geben Sie den Dateinamen (einschließlich Format) an. Verwenden Sie dann OutputStream, um die Datei einzugeben
1.@requestMapping (value = "downphotobyid") 2. public void downphotobystudentId (String -ID, endgültige httpServletResponse -Antwort) {3. PhotoEentity entity = this.photomapper.getPhotoEntityByPhotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. String Dateiname = Entity.getFileName () == NULL? "Foto.png": entity.getFileName (); 6. Dateiname = urlencoder.encode (Dateiname, "UTF-8"); 7. Antwort.Reset (); 8. Antwort. 9. response.addHeader ("Inhaltslänge", "" + data.length); 10. Antwort.SetContentType ("Anwendung/Oktett-Stream; charSet = utf-8"); 11. outputStream outputStream = new bufferedOutputStream (response.getOutputStream ()); 12. outputStream.write (Daten); 13. outputStream.flush (); 14. outputStream.close (); 15.}<a href = "< %= request.getContextPath () %>/downphotobyid.do?id=8000001"> download fotos </a>
5. Byte -Bilddatei anzeigen
1.@RequestMapping (value = "getPhotobyid") 2. public void getphotobyid (String -ID, endgültige httpServletResponse -Antwort) {3. PhotoEentity entity = this.photomapper 4. Byte [] data = entity.getPhotodata (); 5. Antwort.SetContentType ("Bild/JPEG"); 6. Antwort.Setcharactercoding ("UTF-8"); 7. OutputStream OutputSream = Antwort.GetOutputStream (); 8. InputStream in = Neue BytearrayInputStream (Daten); 9. int len = 0; 10. Byte [] buf = neues Byte [1024]; 11. while ((len = in.read (buf, 0, 1024)! 13.} 14. Ausgabsream.close (); 15.}<img src = "< %= request.getContextPath () %>/getphotobyid.do?id=8000001"/>
6. Skalieren Sie das Bild nach Länge und Breite gleiche Anteile
1.@RequestMapping (value = "getPhotoid") 2. public void getphotobyid (String -ID, int Breite, inthöhe, endgültig httpServletResponse -Antwort) {3. PhotoEentity entity = this.photomapper.getPhotoentityByPhotoid (ID); 4. Byte [] data = entity.getPhotodata (); 5. if (width! = 0 && height! 7.} 8. Antwort.SetContentType ("Image/JPEG"); 9. Antwort.Setcharactercoding ("UTF-8"); 10. OutputStream OutputSream = Antwort.GetOutputStream (); 11. InputStream in = Neue BytearrayInputStream (Daten); 12. int len = 0; 13. Byte [] buf = neues Byte [1024]; 14. while ((len = in.read (buf, 0, 1024)! 16.} 17. outputSream.close (); 18.} 19. 20.Public static Byte [] scaleImage (byte [] data, int width, int height) löst ioException aus (21. bufferedImage buffered_oldimage = imageio.read (neuer bytearrayinputstream (Daten)); 22. int imageoldwidth = buffered_oldimage.getWidth (); 23. int imageoldHeight = buffered_oldimage.getheight (); 24. double scaste_x = (doppelt) width / imageoldwidth; 25. Double Scale_y = (doppelte) Höhe / ImageoldHeight; 26. double scale_xy = math.min (scale_x, scale_y); 27. int imperewwidth = (int) (Imageoldwidth * scale_xy); 28. int imageNewHeight = (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 (); 32. bytearrayoutputStream outputStream = new bytearrayoutputStream (); 33. Imageio.write (buffered_newimage, "jpeg", outputStream); 34. Return OutputStream.Tobytearray (); 35.}<img src = "< %= request.getContextPath () %>/getphotobyid.do?id=8000001&width=300&height=300"/>
Das obige ist die Kombination von MyBatis und SpringMVC, um Datei -Upload- und Download -Funktionen zu implementieren. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!