IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

Spring Boot : InputStreamResource et fermeture du flux


Sujet :

Spring Boot Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Points : 102
    Points
    102
    Par défaut Spring Boot : InputStreamResource et fermeture du flux
    Bonjour à tous,

    La question est plutôt simple.
    J'utilise Spring Boot et un objet InputStreamResource pour envoyer un fichier via un service Rest.

    Voici la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	@RequestMapping(value = "/download", method = RequestMethod.GET)
    	public ResponseEntity<InputStreamResource> downloadFile() {
     
    		InputStream fileStream = getStream();
     
    		if (sampleStream != null) {
    			return ResponseEntity.ok().contentType(MediaType.parseMediaType("application/octet-stream"))
    					.body(new InputStreamResource(fileStream));
    		} else {
    			// Else block
    		}
    	}
    Cet exemple est le plus simple qu'on peut trouver un peu partout sur le web (stackoverflow, tutoriels divers...)
    Mais une question demeure dans mon esprit :
    Est-ce-que l'objet InputStreamResource ferme automatiquement le flux fileStream après l'envoi ?
    Je n'ai trouvé aucune ressource sur le web qui traite ce sujet donc j'imagine que c'est le cas et que je n'ai pas à m'en préoccuper. Mais j'aimerais avoir l'avis de la communauté.

    PS: si j'entoure mon return par un try/catch/finally et que je ferme mon flux dans ce finally, un exception est levée (stream closed).

    Merci pour vos commentaires.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    En effet, le stream est bien fermé après l'envois.

    Lorsque votre méthode retourne un objet de type ResponseEntity<InputStreamResource> le résolveur de vue de Spring détecte que vous souhaitez renvoyer un élément implémentant Resource. Celui-ci décide donc d'utiliser la classe ResourceHttpMessageConverter afin de convertir l'objet de type InputStreamResource en httpRequest/httpResponse.

    Bonne journée

    Edit: La classe ResourceHttpMessageConverter lors de la conversion va fermer automatiquement le flux.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/03/2014, 11h56
  2. InputStream et fermeture de flux
    Par Mides dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 19/06/2012, 11h54
  3. help ! fermeture d’un flux video en AS3
    Par cyberbelette dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 12/03/2010, 09h07
  4. Réponses: 3
    Dernier message: 29/03/2008, 09h17
  5. Fermeture de flux
    Par Llo dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/12/2007, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo