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

Services Web Java Discussion :

Récupération de fichiers avec un service web


Sujet :

Services Web Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Récupération de fichiers avec un service web
    Bonjour, je suis junior en développement objet et je galère pour un travail qu'on m'a demandé.

    Je dois créer une page web qui, à l'action d'un bouton entraine l'éxecution d'un script coté serveur créant ainsi un pdf. Ce dernier doit être ensuite envoyé au client pour une consultation/modification.

    Je travaille avec Jboss et axis, et tout ça est encore obscur pour moi (entre le wsdl et les tag soap)
    J'ai regardé les tuto pour créer le service, ce qui fait que je sais faire une belle calculette mais pour le reste, je ne trouve rien de très explicite.

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Bonjour,

    Afin de récupérer des fichiers avec un service web, tu peux les transformer en tableaux de byte côté serveur, puis reconstruire le fichier avec un FileOutputStream côté client.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse, mais c'est le concept que je ne comprends pas

    Je m'explique, je comprends bien un "return x+y" lors d'un envoi de x et y pour une addition, mais pour un fichier à récup sur le serveur, qui peut faire quelques méga, cela devient plus complexe, que dois-je faire ?

    De plus, l'envoi de ma requête entraine sur le serveur l'exécution d'un .bat pour créer le fichier à retourner. Cette création peut mettre plusieurs secondes, le fichier n'est donc pas encore créé quand la requête souhaite le récupérer.

  4. #4
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Points : 215
    Points
    215
    Par défaut
    Je verrais bien les choses comme ça :

    Côté serveur :

    recevoir la requête
    exécuter le script.bat
    tant que le fichier n'est pas généré et qu'un timeout n'est pas dépassé
    .....attendre
    si le timeout n'a pas été dépassé alors
    .....transformer le fichier en tableau de bytes
    .....retourner le tableau de bytes
    sinon
    .....retourner null

    Côté client :

    envoyer la requête
    recevoir le tableau de bytes
    reconstruire le fichier

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ca peut le faire en effet, je vais regarder ça, c'est-à-dire comprendre comment faire d'un fichier un tableau de bytes :p

    Par contre, où est-ce que soap entre en jeu dans le lot ? Je ne comprends pas son utilité.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai réussi à avancer, en trouvant sur le net de quoi encoder et décoder le fichier, j'ai créé une classe codage :
    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
     
    public class Codage {
    	public static byte[] readFile(String filename) throws IOException {
    		File file = new File(filename);
    		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    		int bytes = (int) file.length();
    		byte[] buffer = new byte[bytes];
    		int readBytes = bis.read(buffer);
    		bis.close();
    		return buffer;
    	}
    	// Méthode de création de la chaîne de caractères reprenant l'image
    	// NB : le nom du fichier doit être complet (ie chemin relatif ou absolu et
    	// extension)
    	public static String coder(String fichier) throws Exception {
    		byte[] buffer = readFile(fichier);
    		String encode = Base64.encode(buffer);
    		return encode;
    	}
    	public static void writeFile(byte[] tab, String fichier)
    			throws IOException {
    		File file = new File(fichier);
    		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
    		bos.write(tab);
    		bos.close();
    	}
    	// Méthode pour décoder l'image
    	// NB : la chaîne de caractères est le code Base64, le nom du fichier doit
    	// être complet (ie chemin relatif ou absolu et extension)
     
    	public static void decoder(String image, String fichier) throws Exception {
    		byte[] buffer = Base64.decode(image);
    		writeFile(buffer, fichier);
    	}
    }
    Dans ma servlet, j'encode le fichier, je récupère un string que je mets en session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String fichier = new Codage().coder("C:/mon_fichier.pdf");
    			HttpSession session = req.getSession();
    			session.setAttribute("fichier", fichier);
    Et dans ma jsp, je décode le fichier pour lui demander l'écriture sur le disque sous le nom test.pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%
    	if (session.getAttribute("fichier") != null){ new Codage().decoder(session.getAttribute("fichier").toString(),"c:/test.pdf");
    }
    %>
    Le fait est que ça fonctionne, sauf que ça me crée le fichier sur le serveur

    Comment faire pour le créer sur le client ? Ou plutôt l'ouvrir directement chez le client ?

Discussions similaires

  1. ANT récupération de fichier avec Get
    Par Malatok dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 0
    Dernier message: 25/02/2011, 15h49
  2. Chemin relatif sur un fichier dans un service web
    Par Yoteco dans le forum Services Web
    Réponses: 0
    Dernier message: 07/01/2011, 13h40
  3. Utiliser le client avec un service web Spring ws
    Par chapy dans le forum Services Web
    Réponses: 4
    Dernier message: 21/05/2009, 11h57
  4. Implémenter le design pattern Observer avec les services web
    Par Klemsy78 dans le forum Services Web
    Réponses: 1
    Dernier message: 12/02/2008, 16h51
  5. Problème avec un service Web
    Par matche dans le forum Services Web
    Réponses: 5
    Dernier message: 09/12/2007, 12h12

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