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

Entrée/Sortie Java Discussion :

[HTTP] Envoi de fichiers par http


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [HTTP] Envoi de fichiers par http
    Bonjour,

    Je voudrais savoir s'il est possible d'envoyer des fichiers depuis une appli java vers le web, le but est d'effectuer des échanges entre l'appli et un serveur web, en gros je génère un fichier xml avec mon appli, je l'envoie sur le serveur web qui le traite avec un parser et me renvoie un résultat.

    Pour résumé le but de la manipulation, il s'agit lors du premier lancement de l'appli d'une identification sur le net qui renvoie les informations de l'utilisateur qui lui permettront ensuite de s'identifier au lancement du logiciel lui meme.

    Premier lancement du logiciel : identification sur le net + renvoie des identifiants de l'utilisateur pour l'appli.

    Lancements suivant du logiciel : identification locale avec les identifiants qui lui ont été envoyé lors du premier lancement de l'appli.

    Est-ce possible ? et si oui, comment faire ?

    Merci beaucoup.

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Je pense que les réponses à tes questions sont dans la

    Comment établir une communication entre une applet et une servlet ?

    Cela marche évidement pour une application Java autonome.
    Pour ton cas, je te conseille d'envoyer avec la méthode POST, le fichier au serveur.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Je vois a peu pres comment faire, par contre une chose que je ne comprend...Imaginons que l'autre coté j'ai un site internet en php qui doit recevoir les données, comment je les récupère du coté serveur ?

  4. #4
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    Je ne connais que trés peu le PHP mais sache que cette solution est équivalent à une page HTML ou on submiterais un formulaire avec comme paramétre ton fichier XML ...

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <FORM NAME="F1" ACTION="mapage.php" METHOD="POST" >
           <INPUT TYPE="HIDDEN" name="monfichier" value=".......">
           <INPUT TYPE="SUBMIT" value="Envoyer">
    </FORM>
    à la place des petits points se trouve le contenu de ton fichier XML.

    Donc il suffit de récupérer le contenu du paramétre monfichier passé à la page php

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ok je comprend, le principe est simple.

    Mais maintenant il faut que je trouve un équivalent, car en fait je développe une appli en SuperWaba (pour pda) et étant donné que c'est tres difficile de trouver des infos pour ce langage et que c'est un dérivé du java la plupart du temps je pose mes questions ici.

    Et le probleme est qu'en SW on écrit des bytes au socket, on n'envoie pas directement un string.

  6. #6
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    La classe String posséde la méthode getBytes() qui te permet de récupérer un tableau de byte correspondant à ton String.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Hum j'ai quand meme du mal. Voici mon code de test :

    Les classes que j'utilise existent pe en java :

    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
     
    URI url = new URI("localhost/monsite");
    byte []data = "xml=coucou".getBytes();
    HttpStream conn = new HttpStream(url);
    if (!conn.isOpen()){
    	MessageBox mess2 = new MessageBox("Erreur", "Erreur de connexion");
    	popupBlockingModal(mess2);
    	return false;
    }
    else {
    	byte buf[] = new byte[200]; 
    	conn.writeBytes(data,0,data.length);
    	int tries = 0;
    	do
    	{
    		int count = conn.readBytes(buf, 0, buf.length);
    		if (count == buf.length)
    		{
    			mess=new MessageBox("Réponse", "Read: "+new String(buf,0,count));
    			popupBlockingModal(mess);
    			break;
    		}
    	} while (tries++ < 4 );
    	conn.close();
    	return true;
    }
    Le probleme est qu'il me sort une erreur du type : NullPointer Exception
    à la ligne suivante :
    HttpStream conn = new HttpStream(url);

    J'ai essayé de changer l'url en rajoutant le "http://" mais la ca ne fonctionne pas du tout, il n'arrive pas à se connecter.

  8. #8
    Membre éclairé Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Points : 781
    Points
    781
    Par défaut
    tiens, si ca peut t aider, voici la classe que j utilise pour transferer des fichiers en .gz d'un serveur d appli.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    public class ServFichier extends HttpServlet {
    	public void doPost (HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException {	
    		String Fichier = req.getParameter("fichier");
    		String mois = req.getParameter("mois");
    		String annee = req.getParameter("annee");
    		String file=null;
     
    		if(mois.equals("0")) 
    			file =  "foo";
     
    		//On utilise un ServletOutputStream car on passe des informations binaires
    		ServletOutputStream out = res.getOutputStream();		
     
    		if (file == null) return;	
     
    		// On récupère le type Mime du fichier pour définir le ContentType de la transmission
    		String contentType = getServletContext().getMimeType(file);
    		res.setContentType(contentType);
     
    		// On récupère la longueur du fichier à transmettre : garder la connexion ouverte pour tout le fichier
    		res.setContentLength((int)new File(file).length());
     
    		try {
    			// Envoi du fichier
    			returnFile(file, out);
    		}
    		catch (FileNotFoundException e) {
    		}
    		catch (IOException e) {
    		}
    	}
     
    //	  -----------------------------------------------
    //	   Ecrit le fichier dans le flux de sortie 		
    //	   -----------------------------------------------
    	private void returnFile(String filename, OutputStream out) throws FileNotFoundException, IOException {
    		FileInputStream fis = null;
    		try {
    		// ouverture du flux de lecture;
    			fis = new FileInputStream(filename);
     
    		// création d'un buffer de 4Ko ( améliore la vitesse de transmission)
    			byte[] buf = new byte[4 * 1024]; 
    			int bytesRead;
    			while ((bytesRead = fis.read(buf)) != -1) {
    				//Ecriture  dans le flus de sortie
    					out.write(buf, 0, bytesRead);
    			}
    		}
    		finally {
    			// Fermeture du flux d'entrée
    				if (fis != null) fis.close();
    		}
    	}	
    }
    au niveau appel :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    public class ConnexionServeur {
     
      public ConnexionServeur(){
      }
      public String etablirConnection(String chemin, String[][] param){
     
        String reponse="";
    	URL url=null;
                InputStream in=null;
        try{
     
        // ouverture de la connection
           url = new URL("http:X.X.X.X:8080"+chemin);
          URLConnection connection = url.openConnection();
     
        //autorisation d'utiliser le canal OutputStream
          connection.setDoOutput(true);
          connection.setUseCaches(false);
     
        //envoi des parametres en POST (canal OutputStream);
          OutputStream out = connection.getOutputStream();
     
     
          out.write(toEncodedString(param).getBytes());
          out.flush();
          out.close();
     
        //Reception de la reponse du servlet(canal InputStream)
          in=connection.getInputStream();
     
     
        /*	System.out.println(connection.getContentType());
                System.out.println(connection.getContentLength());*/
         BufferedReader retour = new BufferedReader(new InputStreamReader(in));
          String r;
          while((r=retour.readLine())!=null){
                  reponse += r;
          }
     
        // fermeture du flux d'entr�e
          in.close();
     
        }catch(Exception e){
                e.printStackTrace();
                System.out.println(url+"?"+toEncodedString(param)+" : "+e);
        }
        finally{
        }
     
        return reponse;
      }
     
    //---------------------------------------------------------
    //   Encodage des parametres de la requete HTTP
    //---------------------------------------------------------
     
      private String toEncodedString(String[][] args) {
        StringBuffer buf = new StringBuffer();
        int lg = args.length;
     
        for (int i = 0; i<lg; i++) {
          String name = args[i][0];
          String value =  args[i][1];
          buf.append(name + "=" + value);
          if (i<lg-1) buf.append("&");
        }
     //   System.out.println(buf.toString());
        return buf.toString();
      }
    }
    j espere que ca va t aider

    ++

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

Discussions similaires

  1. Envoi de fichier par HTTP
    Par siro1 dans le forum Langage
    Réponses: 19
    Dernier message: 29/03/2012, 14h44
  2. Réponses: 2
    Dernier message: 07/02/2008, 10h28
  3. [HTTP] Envoi de fichiers par http post
    Par java_girl dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 28/08/2006, 16h44
  4. [Système] Téléchargement par HTTP d'un fichier
    Par Thierry8 dans le forum Langage
    Réponses: 20
    Dernier message: 06/06/2006, 10h42
  5. Téléchargement de fichiers par HTTP / FTP
    Par Gladiator dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 07/12/2005, 11h28

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