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

Java Discussion :

Obtenir un File à partir d'un ByteArrayOutputStream


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut Obtenir un File à partir d'un ByteArrayOutputStream
    Bonjour à tous,

    Dans le cadre du projet sur lequel je travaille j'ai un objet ByteArrayOutputStream et je souhaite le renvoyer à l'utilisateur sous la forme d'un fichier à télécharger.
    Or la méthode qui doit renvoyer ce fichier, doit le renvoyer dans un StreamInfo et pour construire un StreamInfo il faut un content-type (là y'a pas de problème) et un File.
    Et je ne sais pas comment passer d'un ByteArrayOutputStream à un File...

    Voici l'état actuel de ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public StreamInfo myExecute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response, final UserContextBean context) throws IOException, ServletException, Exception {
     
    	final IJaxbIS myJaxb = (IJaxbIS)InteractiveServiceFY.getFactory().getIs(InteractiveServiceConstantes.JAXB_IS));
    	final OutputStream os = myJaxb.createAccidentTravailToBinary(context);
    	final String contentType = "";
     
    //ICI file pose problème ! Parce que je ne sais pas comment le créer à partir de l'objet "os"
    	final FileStreamInfo fsi = new FileStreamInfo(contentType, file);
    	final StreamInfo myStreamInfo = null;
    	return null;
    }
    Si quelqu'un a une idée, je suis preneur
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ce n'est pas la bonne manière de faire. Il faut modifier la méthode qui envoie le fichier, pour qu'elle accepte un byte[] au lieu d'un File.

    Si tu tiens à faire avec un File, je suggère création d'un fichier temporaire avec File.createTempFile(), et d'appeler delete() dessus quand l'envoi est terminé.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut
    EDIT :
    Je n'avais pas vu les autres réponses...
    J'étudie ce que vous m'avez dis...et je vous dis ou j'en suis

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut
    Bon j'avoue que je ne comprends plus rien...

    Ma méthode myExecute() renvoie un StreamInfo : dois-je modifier ça ?
    Ma méthode createAccidentTravailToBinary renvoie un OutputStream : dois-je modifier ça ?

    Précision (au cas où) : le but de la méthode myExecute est de proposer à l'utilisateur via une page web, un fichier binaire en téléchargement.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 126
    Par défaut
    Finalement j'ai fait quelque chose qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public StreamInfo myExecute(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
    	                            final HttpServletResponse response, final UserContextBean context) throws IOException, ServletException, Exception {
     
    		// final FileOutputStream fos = null;
    		final IJaxbIS myJaxb = ((IJaxbIS)InteractiveServiceFY.getFactory().getIs(InteractiveServiceConstantes.JAXB_IS));
     
    		final File tempFile = File.createTempFile("Binary", "");
    		myJaxb.createAccidentTravailToBinary(context, tempFile);
    		final String contentType = "application/octet-stream";
    		final FileStreamInfo fsi = new FileStreamInfo(contentType, tempFile);
    		tempFile.delete();
    		return fsi;
    	}
    Qu'en pensez vous ?
    Au final ma méthode createAccidentTravailToBinary() modifie un File qui lui est passé en paramètre.


    J'ai un doute sur le contentType...si vous avez mieux : il me faudrait un content-type qui signifie : "données binaires sans signification particulières" ^^

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    à mon avis c'est l'objet StreamInfo qui ne contient pas les bons infos, au lieu d'un File, il suffit d'utiliser un tableau de byte.

  7. #7
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Tu peux utiliser FileOutputStream, quelque chose qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    byte []  data=   byteArrayOutputStream.toByteArray();
    OutputStream output = new FileOutputStream(fileName);
     
    output.write(data);
     
    output.close;

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    et comme dit thelvin , inutile d'envoyer un File, tu peux mettre le flux de byte directement dans la response et l'utilisateur pourrait récupérer le fichier, si tu as la main sur la fonction il vaut mieux utiliser byte [], c'est même plus simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Obtenir un tableau à partir d'une liste
    Par JMO91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2006, 00h07
  2. Réponses: 4
    Dernier message: 07/01/2006, 18h36
  3. Obtenir une chaîne à partir d'une énumération
    Par zidenne dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2005, 10h39
  4. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40
  5. [Servlet][IO]Ecrire un File à partir d'un InputStream
    Par ravioli dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/02/2004, 10h15

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