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 :

télécharger fichier en mode asynchrone


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Par défaut télécharger fichier en mode asynchrone
    Bonjour,

    J'essaie de télécharger un fichier CSV d'un serveur tomcat vers un navigateur.

    J'ai le code Java suivant :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    		response.setContentType("application/csv");
    		response.setHeader("Content-Disposition", "attachment;filename=timefull.xml");
     
    		ServletOutputStream out = response.getOutputStream();
    		File file = null;
    		BufferedInputStream from = null;
    		try { 
    			//dans mon cas le filepath et le path complet après création
    			// d'un temp file 
    			String filepath = Environment.getEnv().getWebContentPath() + "\\graph\\34\\timefull.xml";
    			file = new File(filepath);
    			response.setContentLength((int) file.length()); 
    			int bufferSize = 64 * 1024;
    			long time = System.currentTimeMillis();
     
    			try {
    				from = new BufferedInputStream(new FileInputStream(file), bufferSize * 2);
    				byte[] bufferFile = new byte[bufferSize];
    				for (int i = 0; ; i++) {
    					int len = from.read(bufferFile); 
    					if (len < 0) break; 
    					out.write(bufferFile, 0, len);
    				}
    				out.flush();
    			} finally { 
    				try { 
    					from.close();
    				} catch (Exception e) { } 
    				try { 
    					out.close();
    				} catch (Exception e) {} 
    			} 
    			time = (System.currentTimeMillis() - time) / 1000; 
    			// seconds download 
    			double kb = (file.length() * 1.0 / 1024);
     
    			if (file != null) file.delete(); 
    		} catch (Exception e) {
    			return; 
    		} finally { 
    			try { 
    				file.delete();
    			} catch (Exception ex) {}
    		}
    Il fonctionne très bien dans la méthode doPost de la servlet "Test" quand je l'appelle en mode non-asynchrone, c'est à dire à partir de la page html avec ce code là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form method="post" action="./Test">
    	<input type="submit" value="DL"></input>
    </form>

    En revanche, quand je l'appelle de manière asynchrone via javascript, le fichier est bien envoyé par la servlet, mais je n'arrive pas à la gérer avec javascript.

    J'ai le code javascript suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var responseHeader = req.getResponseHeader("Content-Type");
    Ma variable responseHeader contient bien la chaîne "application/csv".

    Mais que faire ensuite pour que la fenêtre d'acceptation de téléchargement apparaisse ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Par défaut
    Bonjour,

    visiblement il n'y a pas beaucoup de réponses.
    Peut-être que la fonction n'est pas supportée via javascript ...

    Quelqu'un sait-il où il est possible de vérifier ? Y a t-il un "grand manuel" du javascript ?

    Si je ne trouve pas, je ferai la méthode servlet --> navigateur, sans passer par javascript.

    Merci d'avance.

  3. #3
    Membre chevronné
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Par défaut
    pourquoi veux tu absolument passer par un mode asynchrone ?
    les fichiers sont si gros que ca ?
    car si le document se trouve au niveau de ton serveur il est donc au niveau de ta servlet qui le lis et le renvoie directement à l'utilisateur.

    j'avais dans l'idée de faire la même chose que toi pour la génération de pdf à partir de fichier tiff mais en utilisant de l'XMLRequest et charger le pdf dans une frame ou div caché que je ferais apparaitre à l'utilisateur quand le chargement serait fini.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Par défaut
    Hello,

    merci pour la réponse.

    J'étais passé par du javascript asynchrone car c'était déjà plus ou moins pré-encodé via les méthodes existantes de mon application et le codage était beaucoup plus rapide, mais vu que cela ne fonctionne pas, je viens de le coder en mode servlet --> navigateur, et comme ça, ça fonctionne bien.

    Merci !

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

Discussions similaires

  1. Ecrire un fichier en mode asynchrone
    Par sivaller dans le forum Windows
    Réponses: 1
    Dernier message: 03/11/2009, 10h22
  2. Réponses: 4
    Dernier message: 04/11/2005, 09h04
  3. imprimer fichier en mode paysage
    Par Le Veilleur dans le forum C++Builder
    Réponses: 13
    Dernier message: 10/02/2005, 21h38
  4. [.NET] Une question technique a propos du mode asynchrone
    Par nicknolt dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/06/2004, 10h07
  5. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46

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