Klicken Sie hier, um Bilder hochzuladen (https://qiita.com/shibafu/items/16dbf776bd81a40450fd)
Wenn Sie Spring und Ihre Komposition nicht kennen, denke ich, dass es ein Durcheinander ist, deshalb werde ich mein Projekt ein wenig erklären.
Es hat eine solche Struktur. Auf den ** Controller ** wird zuerst auf diesen Server zugegriffen. Jede der darin enthaltenen Methoden akzeptiert den Zugriff.
** Service ** ist der Ort, an dem die eigentliche Verarbeitungsbeschreibung des Programms gespeichert wird. Werfen wir einen Blick auf den Inhalt des Dienstes.
Die ** Schnittstelle ** ist der Einstiegspunkt für Controller und andere Java-Programme in diesen Dienst. Und dies wird in einer Klasse namens hogehoge ** Impl ** implementiert. (Impl bedeutet "Implementierung".)
Warum ist es notwendig, die Verarbeitungsbeschreibung und den Eingang zu trennen? Sehen wir uns die Beschreibung an, die den Dienst tatsächlich aufruft
Schauen Sie sich zuerst das Programm rechts an Es ist mit ** @ Service ** versehen. Dies bedeutet, dass dies eine "Class of Service" -Deklaration ist und gleichzeitig ** eine Instanz im DI-Container registriert **. ** DI-Container ** ist eine Funktion von Spring Framework, wodurch Java-Programme ** lose gekoppelt ** werden. Das Spring Framework steuert die Erstellung und Freigabe von Instanzen, die in den DI-Container eingegeben werden.
Was mich daran freut, ist, dass es auch dann kompiliert werden kann, wenn die Verarbeitung nicht implementiert ist. Werfen wir einen Blick auf den Serviceabruf auf der linken Seite.
** Schnittstelle ** Deklaration und Es ist mit ** @ Autowired ** versehen.
@Autowired ist ein Befehl zum Erstellen eines registrierten DI-Containers dieser Typinstanz (kann nicht verwendet werden, wenn zwei oder mehr Beans desselben Typs registriert sind).
Was Sie hier beachten sollten, ist, dass ** wir beim Erstellen der Instanz keine neuen verwenden **. Mit anderen Worten, es ist ein Programm, das nur mit einer leeren Klasse kompiliert werden kann, die als Schnittstelle bezeichnet wird.
Durch das Entwerfen der Schnittstelle ** 1. Ich kann mir vorstellen, welche Funktionen erstellt werden sollen ** ** 2. Es hat den Vorteil, dass es auch dann kompiliert werden kann, wenn die Funktion nicht implementiert ist **.
Die Struktur eines solchen Programms Es wird als ** Fassade (Vordereingang) ** Designmuster bezeichnet. (Genau genommen scheint es ein bisschen anders zu sein
Es ist so. Wenn Sie sich von nun an als Service bezeichnen, "Verarbeitung auf der Serviceseite" Wenn Sie es als Controller bezeichnen, lesen Sie es als "Oh, der erste Prozess, den der Server empfängt". Die Seite ist vorbei.
Das Hauptthema von hier
Erstellen Sie zunächst eine Bildeingabefunktion mit dem JPA-Repository. Dies ist genau das, also gibt es kein Problem.
Erstellen Sie zunächst einen Prozess, um das Bild in der Datenbank zu registrieren.
pictureServiceImpl.java
@Autowired
PictureMasterRepository pRepository;
@Override
public int addPicture(byte[] picturedata, String pictureName, String originalName, Integer uploadUserId) {
//TODO automatisch generierter Methodenstub
PictureMaster input = new PictureMaster();
input.setPictureData(picturedata);
input.setPictureName(pictureName);
input.setOriginalName(originalName);
input.setUploadUserId(uploadUserId);
pRepository.saveAndFlush(input);
return 0;
Erstellen Sie als Nächstes einen Prozess zum Lesen des Bildes. Erstellen wir den Zugriff auf die Datenbank mithilfe der automatischen Implementierungsfunktion des JPA-Repositorys.
PictureMasterRepository.java
@Repository
public interface PictureMasterRepository extends JpaRepository<PictureMaster, Integer> {
public PictureMaster findByPictureId(Long pictureId);
public PictureMaster findByPictureName(String pictureName);
public List<PictureMaster> findByUploadUserId(int uploadUserId);
//Suche nach "Gefällt mir"
// public List<UserMaster> findByUsernameLike(String usernamename);
// public List<UserMaster> findByEmailLike(String email);
// @Query("SELECT count(*) From UserMaster u WHERE u.username = :username")
// public int countByUsername(@Param("username")String username);
}
pictureServiceImpl.java
/**
*Gibt ein registriertes Bild basierend auf dem Benutzernamen zurück
*/
@Override
public List<PictureMaster> readUserPicture(Integer uploadUserId) {
List<PictureMaster> searchResult = pRepository.findByUploadUserId(uploadUserId);
return searchResult;
}
Ich konnte eine bestimmte Verarbeitung durchführen ヾ (.> ﹏ <.) Nottater
Übergeben Sie dann den erstellten Prozess an die Steuerung.
ImageIOController.java
ModelAndView mv = new ModelAndView("ImageView");
List<PictureMaster> UserPicutres = pictureService.readUserPicture(LoginUser.getUserId());
Bisher haben wir über Java gesprochen. Übergeben wir die hier erhaltenen Daten an jsp!
Übrigens verwenden der Controller und jsp ein Objekt namens Model, um Werte auszutauschen. Es ist ein bisschen anders als die Saite.
Verwenden wir jetzt die neueste Technologie. Das in der DB registrierte Bild besteht aus Binärdaten. Konvertieren Sie dies in BASE64.
BASE64 ist eine Codierungsmethode für den Austausch von Binärdaten mit hoher Geschwindigkeit im Web. Ersetzt Daten wie gewöhnliche Hexadezimalzahlen durch 64-Basis-Zeichendaten. Es ist aus Java8 implementiert, also lasst es uns verwenden.
ImageIOController.java
@RequestMapping(value = "/imageView", method = RequestMethod.GET)
public ModelAndView imageView(Principal principal) {
//Anmeldeinformationen abrufen
Authentication auth = (Authentication)principal;
LoginUserDetails LoginUser = (LoginUserDetails)auth.getPrincipal();
//Holen Sie sich das Bild zur Benutzerregistrierung
ModelAndView mv = new ModelAndView("ImageView");
List<PictureMaster> UserPicutres = pictureService.readUserPicture(LoginUser.getUserId());
for(PictureMaster pict:UserPicutres) {
//Holen Sie sich die Erweiterung
pict.setExtension(pict.getOriginalName().substring(pict.getOriginalName().length() - 4, pict.getOriginalName().length()));
//In BASE64 konvertieren
pict.setBase64string(Base64.getEncoder().encodeToString(pict.getPictureData()));
//Binärdaten löschen
pict.setPictureData(null);
}
mv.addObject("UserName",LoginUser.getUsername());
mv.addObject("UserPictures", UserPicutres);
return mv;
}
So was. Bitte beachten Sie die Kommentare für den Inhalt des Prozesses.
Lassen Sie uns die Verarbeitung auf der JSP-Seite erstellen.
ImageVire.html
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<head>
<meta content="ja" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Bitte geben Sie Ihr Lieblingsbild für Meer oder Wasser ein</title>
</head>
<body>
<p>
${UserName}Es ist ein Bild, das von Herrn ヾ registriert wurde(¡>﹏<¡)Nein</p>
<c:forEach var="picture" items="${UserPictures}" varStatus="status">
<p>${picture.pictureName}</p>
<img src="data:image/${picture.extension};base64,${picture.base64string}">
</c:forEach>
</body>
</html>
Die Schleife wird mit dem üblichen ** c-Tag ** wiederholt. Der Punkt ist hier das -Tag.
Geben Sie die Erweiterung mit ** $ {picture.extension} ** an. ** base64, $ {picture.base64string} ** gibt die base64-Binärdatei an.
Mit anderen Worten, die tatsächliche HTML-Ausgabe sieht folgendermaßen aus.
ImageView.html
<img src="data:image/${picture.extension};base64,${picture.base64string}">
Lass uns rennen
Ich konnte das registrierte Bild so anzeigen.
Referenz So binden Sie ein Bild mit Base64 direkt in eine HTML-Datei ein Ich möchte wissen, wie ein Bild oder eine Datei (pdf usw.) in JSP eingegeben, in der Datenbank registriert, aufgerufen und auf dem Bildschirm angezeigt wird.
Recommended Posts