Je veux afficher des images avec REST Controller de Java et Spring!

Je veux afficher des images en Java!

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!

Remarque

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!)

Affichage des images avec le contrôleur REST? ?? ??

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?

Passer les données au format binaire

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.

Transmettez les données à HttpEntity pour afficher l'image

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);
}

À la fin

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

Je veux afficher des images avec REST Controller de Java et Spring!
Je veux faire des transitions d'écran avec kotlin et java!
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
Je veux implémenter diverses fonctions avec kotlin et java!
Je veux revenir à l'écran précédent avec kotlin et java!
Pratique des bases de la programmation Java - Je veux afficher un triangle avec une instruction for ①
Je veux utiliser java8 forEach avec index
Pratique des bases de la programmation Java - Je veux afficher un triangle avec une instruction for ②
Je souhaite afficher le nom de l'affiche du commentaire
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
J'ai essayé de créer une fonction / écran d'administrateur de site commercial avec Java et Spring
J'ai essayé de résumer les bases de kotlin et java
J'ai essayé de vérifier ceci et celui de Spring @ Transactional
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
[Java] Je souhaite tester l'entrée standard et la sortie standard avec JUnit
J'ai essayé d'interagir avec Java
Je souhaite échanger des données JSON (objets) avec Ajax entre Java et JavaScript! ~ Édition de printemps ~
Je veux comprendre le flux des paramètres de demande de traitement Spring
Je veux INSÉRER l'heure locale du printemps avec l'heure MySQL (également en millisecondes)
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux contrôler le message d'erreur par défaut de Spring Boot
Je souhaite effectuer un traitement asynchrone et une exécution périodique avec Rail !!!
Comment réaliser un téléchargement de fichiers volumineux avec Rest Template of Spring
[Spring Boot] Je veux ajouter mon propre fichier de propriétés et obtenir la valeur avec env.getProperty ().
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Après 3 mois de formation Java et Spring
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux arrêter complètement les mises à jour Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
Je veux jouer avec l'autorisation du répertoire Windows de WSL (ubuntu)
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
[Ruby] Je souhaite afficher les éléments publiés par ordre de date la plus récente
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je veux ForEach un tableau avec une expression Lambda en Java
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
J'ai essayé de traduire la grammaire de R et Java [Mis à jour de temps en temps]
J'ai essayé de mesurer et de comparer la vitesse de Graal VM avec JMH
Juste des images d'entrée et de sortie avec Spring MVC
Exécuter R à partir de Java Je veux exécuter rJava
J'ai essayé de faire une authentification de base avec Java
Je souhaite envoyer un e-mail en Java.
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Essayez d'intégrer Ruby et Java avec Dapr
J'ai comparé les caractéristiques de Java et .NET
Je veux var_dump le contenu de l'intention
rsync4j --Je veux toucher rsync en Java.
[Débutant] Téléchargez des images et des fichiers avec Spring [Autosuffisant]
Je veux jouer avec Firestore de Rails