Dies ist YuruFuwaFox. Ich lerne Java. Wie kann ich das Bild dieses Mal mit dem REST-Controller von Spring anzeigen? Also habe ich es implementiert, während ich verschiedene Dinge recherchiert habe, also möchte ich die Methode mit einem Memo teilen!
Dieser Artikel ist für Anfänger in Java gedacht. Ich bin nicht für Leute, die Tsuyotsuyo-Ingenieure sind, also würde ich Ihre Gunst schätzen. Wenn Sie es noch lesen, danke! (Es ist auch willkommen, darauf hinzuweisen, was falsch ist!)
Was ist RESTController? Ich werde aus erklären. RESTController ist für die sogenannte API, die JSON oder XML als Rückgabewert zurückgibt. Ein normaler Controller gibt grundsätzlich eine Ansicht zurück, aber es ist so, als würde nur die Daten übergeben! Mit anderen Worten, wenn Sie eine Ansicht zurückgeben möchten, können Sie das Bild anscheinend einfach an die Ansicht übergeben und irgendwie anzeigen. Was sollten Sie jedoch mit einem REST-Controller tun, der JSON oder XML zurückgibt?
Bilder können angezeigt werden, indem sie als Binärdaten übergeben werden. Aus diesem Grund habe ich beschlossen, das Bild im Binärformat anzuzeigen.
Ich werde das Bild im Browser anzeigen. Daher werde ich HttpEntity verwenden, um ein Bild in den Antworttext einzufügen.
showImgService.java
public HttpEntity<[byte]> showImg(String image) throws IOException{
//Holen Sie sich ein Bild
Resource resource = resourceLoader.getResource("File:" + staticPath + imgPath);
//Zur Bildformataufnahme
String format;
//Zum Speichern von Byte-Daten
ByteArrayOutputStream bout;
//Bild-zu-Byte-Daten
try (InputStream img = resource.getInputStream()) {
format = URLConnection.guessContentTypeFromStream(img);
bout = new ByteArrayOutputStream();
int c;
while ((c = img.read()) != -1) {
bout.write(c);
}
}
//Byte-Daten extrahieren
byte[] bytes = bout.toByteArray();
//Header erstellen
HttpHeaders headers = new HttpHeaders();
//Speichern Sie Inhaltsinformationen in der Kopfzeile
headers.setContentType(MediaType.valueOf(format));
headers.setContentLength(bytes.length);
//Übergeben Sie Byte-Daten und Header an HttpEntity und kehren Sie zurück
return new HttpEntity<>(bytes, headers);
}
Es ist wirklich ein Memo, also ist es ein raues Gefühl. Sie können Bildbyte-Daten mithilfe von IOUtils tatsächlich in eine Zeile konvertieren, aber diesmal habe ich es vergessen, also sieht es so aus. Ich hoffe es hilft jemandem!
Recommended Posts