C'est YuruFuwaFox. J'étudie Java. Comment puis-je afficher l'image avec le contrôleur REST de Spring cette fois? Je l'ai donc implémentée en recherchant diverses choses, alors j'aimerais partager la méthode avec un mémo!
Cet article s'adresse à un débutant en Java. Je ne suis pas pour les gens qui sont des ingénieurs de Tsuyotsuyo, alors j'apprécierais votre faveur. Si vous le lisez encore, merci! (Souligner ce qui ne va pas est également le bienvenu!)
Tout d'abord, qu'est-ce que RESTController? Je vais expliquer à partir de. RESTController est destiné à ce que l'on appelle l'API qui renvoie JSON ou xml comme valeur de retour. Un contrôleur normal renvoie essentiellement une vue, mais c'est comme ne transmettre que les données! En d'autres termes, si vous souhaitez renvoyer une vue, il semble que vous puissiez simplement passer l'image à la vue et l'afficher d'une manière ou d'une autre, mais que devez-vous faire avec un contrôleur REST qui renvoie JSON ou xml?
Les images peuvent être affichées en les passant sous forme de données binaires. Par conséquent, j'ai décidé d'afficher l'image en la passant au format binaire.
J'afficherai l'image sur le navigateur. Par conséquent, j'utiliserai HttpEntity pour mettre une image dans le corps de la réponse.
showImgService.java
public HttpEntity<[byte]> showImg(String image) throws IOException{
    //Obtenir une image
    Resource resource = resourceLoader.getResource("File:" + staticPath + imgPath);
    //Pour l'acquisition de format d'image
    String format;
    //Pour stocker des données d'octet
    ByteArrayOutputStream bout;
    //Image en données d'octet
    try (InputStream img = resource.getInputStream()) {
        format = URLConnection.guessContentTypeFromStream(img);
        bout = new ByteArrayOutputStream();
        int c;
        while ((c = img.read()) != -1) {
            bout.write(c);
        }
    }
    //Extraire les données d'octet
    byte[] bytes = bout.toByteArray();
    //Créer un en-tête
    HttpHeaders headers = new HttpHeaders();
    //Stocker les informations de contenu dans l'en-tête
    headers.setContentType(MediaType.valueOf(format));
    headers.setContentLength(bytes.length);
    //Passez les données d'octet et l'en-tête à HttpEntity et retournez
    return new HttpEntity<>(bytes, headers);
}
C'est vraiment un mémo, donc c'est un sentiment difficile. Vous pouvez en fait convertir les données d'octets d'image en une seule ligne en utilisant IOUtils, mais cette fois j'ai oublié, donc ça ressemble à ceci. J'espère que cela aide quelqu'un!
Recommended Posts