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

Servlets/JSP Java Discussion :

renvoi de données limité pour un fichier CSV par PrintWriter


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut renvoi de données limité pour un fichier CSV par PrintWriter
    Bonjour,
    je travaille sur une application utilisant SPRING et j'essaye d'écrire une chaine de caractère de près de 19000 caractères dans un fichiers CSV que je renvoie au client à l'aide de PrintWriter.write (response.getWriter().write) de l'objet HttpServletResponse. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public ModelAndView getViewdomainReport(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // domainString est une chaine de caractères contenant près de 19000 caractères
    String domainString = reportManagementService.getViewdomainReport(domainRows,domain);
    String filename = domain.getDomainNameWithoutBlank()+".csv";
    response.setContentType("text/csv");
    response.getWriter().write(domainString);
    response.setHeader("Content-Disposition", "attachment; filename=\""
    	    		+ filename + "\"");
     return null;
    }
    Il se passe la chose curieuse suivante : lorsque la chaine de caractere domainString contient jusqu'à 8000 caractères, le fichier ".CSV" est bien envoyé au client sous le nom approprié et je peux l'ouvrir avec excel. Lorsque je depasse les 8000 caractères, je ne peux pas récupérer la réponse sous format ".CSV" mais la réponse est envoyé directement dans le browser sous la forme de chaine de caractère (domainString) affichée directement dans la page du browser avec l'URL "/getViewdomainReport.htm". C'est à dire que je dépasse la capacité d'un fichier renvoyé avec la méthode write. Je pense que le fait que ça soit renvoyé au format ".CSV" n'a pas d'importance. Il se passerai la même chose si c'était au format html ou autre. C'est surement la taille de la réponse qui est limitée. Que faire ? est-ce une histoire de buffer ? comment récupérer mes 19000 caractères dans mon fichier ".CSV" pour que je puisse l'ouvrir avec EXCEL ?
    Si vous pouvez me venir en aide, merci d'avance.

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Essaies en ajoutant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.flushBuffer();
    avant le return null;

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Merci djo.mos de ta réponse. J'ai essayé, mais ça ne fonctionne pas

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Oki, et avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    response.getWriter().flush();
    response.flushBuffer();
    (je déplaces vers le forum Servlets)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    729
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 729
    Points : 250
    Points
    250
    Par défaut
    Merci encore djo.mos pour ta reponse.
    Finalement j'ai trouve la reponse : je suis passe par un outputStream qui n'a pas de limite pour le renvoie de donnees. Voici le code si ca interesse quelqu'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public ModelAndView getViewdomainReport(HttpServletRequest request, HttpServletResponse response) throws Exception {
    long domainId = Long.parseLong(request.getParameter("domainId"));
    long projectId = Long.parseLong(request.getParameter("projectId"));
    String isQA = request.getParameter("isQA");
    Domain domain = domainManagementService.getDomain(domainId);
    List domainRows = domainManagementService.viewDomain(domainId,projectId,isQA);
    String domainString = reportManagementService.getViewdomainReport(domainRows,domain);
    String filename = domain.getDomainNameWithoutBlank()+".csv";
    response.setContentType("text/csv");
     
    response.setHeader("Content-Disposition", "attachment; filename=\""
    	    		+ filename + "\"");
    OutputStream os = response.getOutputStream();
     InputStream is = new ByteArrayInputStream(domainString.getBytes());
    int count;
    byte buf[] = new byte[4096];
    while ((count=is.read(buf))>-1) {
    	os.write(buf,0,count);
    }
    os.flush();
    os.close();
    is.close();
    return null;
    }

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    et un response.setContentLength() ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/01/2014, 10h13
  2. Réponses: 4
    Dernier message: 16/09/2010, 22h33
  3. Réponses: 1
    Dernier message: 26/01/2007, 08h15
  4. [CSV] Détecter le séparateur pour les fichiers CSV
    Par JavaEli dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2005, 23h42
  5. [Excel] séparateur pour les fichiers csv
    Par drinkmilk dans le forum Excel
    Réponses: 2
    Dernier message: 27/08/2005, 14h21

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