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 :

Servlet qui recoit des fichiers


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Servlet qui recoit des fichiers
    Bonjour a tous,

    Je fait une application en swing qui permettra de transferer un ou plusieurs fichier.
    Mon probleme se pose au niveau de la servlet hébergée sur un serveur J2EE (comme tomcat par ex) .
    Cette servlet se charge de recevoir les fichiers que je lui envoie via mon interface swing et de les stocker dans un répertoire de mon appli.

    Cependant, je ne sais pas trop comment envoyer ce fichier à la servlet et comment cette servlet fonctionnera ?

    si quelqu'1 a une idée de comment je pourrai commencer sa serait sympa?

    merci

  2. #2
    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
    Tu peux faire plus simple

    Ton appli J2SE/Swing upload des documents dans des répertoires auquel ton application J2EE a accès.


    Ou si tu veux vraiment faire communiquer tes 2 applications

    regarde du coté de java.net.URL


    Voici quelque bout de code que j'utilise pour faire des choses similaire a ta demande

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    /**
    	 * Recupere l'url de l'application Webmail
    	 * @param action
    	 * @return
    	 * @throws IOException
    	 */
    	private URL getURL(String action) throws IOException
    	{		
    		String serverBase = WebstartProperties.getString("URL_Appication");
    		URL serverURL = new URL(serverBase);
    		URL url = new URL(serverURL + action);		
    		return url;		
    	}
     
    	/**
    	 * Ouvre la connection et recupère le flux sortant 
    	 * @param urlCon
    	 * @param contentType
    	 * @return
    	 * @throws IOException
    	 */
    	private DataOutputStream getDataOutputStream(String urlCon, String contentType) throws IOException
    	{
    		int contentLength = 0;
    		urlConnection = (HttpURLConnection)getURL(urlCon).openConnection();
    		urlConnection.setRequestMethod("POST"); //Methode Post
    		urlConnection.setDoInput(true); // true read from server enabled
    		urlConnection.setDoOutput(true); // write to server enabled
    		urlConnection.setUseCaches(false); // Don't use a cached version of URL connection.
    		urlConnection.setDefaultUseCaches(false);
    		urlConnection.setRequestProperty("content-type", contentType); // Specify the content type that we will send binary data
    		urlConnection.setRequestProperty("content-length", String.valueOf(contentLength));
     
    		DataOutputStream out = new DataOutputStream(urlConnection.getOutputStream());
     
    		return out;			
    	}
     
    	/**
    	 * Permet l'upload d'un fichier file de type contentType vers un serveur avec comme url urlCon 
    	 * 
    	 * @param file
    	 * @param urlCon
    	 * @param contentType
    	 * @throws IOException
    	 */
    	public void upload(File file, String urlCon, String contentType) throws Exception 
    	{
    		FileInputStream in = null;
    		DataOutputStream  out = null;
    		try
    		{		
    			//On récupère la taille du fichier		
    			int sizeFile = (int)file.length();
     
    			//On load le fichier			
    			in = new FileInputStream(file); 
     
     
    			byte buf[]= new byte[sizeFile];
    			in.read(buf);			
    			in.close();
     
    			out = getDataOutputStream(urlCon, contentType);
     
    			out.write(buf);			
    		}
    		catch(Exception ioe)
    		{
    			throw ioe;
    		}
    		finally
    		{
    			if(in != null) in.close();
    			if(out != null)
    			{
    				out.flush();
    				out.close();
    			}
    		}
     
    	}
     
    	/**
    	 * Recupère le flux venant du serveur
    	 * 
    	 * @param urlConnection
    	 * @return
    	 * @throws IOException
    	 */
    	public StringBuffer getResponse() throws IOException
    	{
    		InputStream is = null;
    		BufferedReader din = null;
     
    		try
    		{
    			is = urlConnection.getInputStream();
    			din = new BufferedReader(new InputStreamReader(is));
     
    			StringBuffer sbuf = new StringBuffer();
    			String line;
     
    			//On récupère le flux du serveur
    			while ((line = din.readLine())!=null)
    			{
    					sbuf.append(line);
    			}
     
    			return sbuf;
    		}
    		catch(IOException ioe)
    		{
    			throw ioe;
    		}
    		finally
    		{
    			if(din != null) din.close();
    			if(is != null) is.close();
    		}
    	}

    cote serveur

    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
     //On ouvre le flux et on commence la récupération du fichier			
                ServletInputStream sis = request.getInputStream();
                int len = request.getContentLength();
     
     
                byte[] buff = new byte[len];
                BufferedInputStream in = new BufferedInputStream(sis, buff.length);
                createFile(in);
     
     
     
     
     
     
              public int createFile(BufferedInputStream in) throws Exception {
     
    		int count = 0;
     
    		File tmpFile = new File(getRootPath(), getFileName());
    		BufferedOutputStream out = null;
    		FileOutputStream fos = null;
    		try 
    		{
    			if (tmpFile.exists()) tmpFile.delete();
    				tmpFile.createNewFile();
    				fos = new FileOutputStream(tmpFile);
    				byte[] buff = new byte[8192];
    				out = new BufferedOutputStream(fos, buff.length);
    				int i;
    				while ((i = in.read(buff,0,buff.length)) != -1)
    				{ 
    					out.write(buff,0,i);
    					count += i;
    					/*
    					String nulle = null;
    					nulle.toLowerCase();
    					*/
    				}				
    				tmpFile = null;
     
    				out.close();
    				fos.close();
    		}
    		catch(Exception e)
    		{
    				try {
    					out.close();
    					fos.close();
    				}
    				catch (IOException e1) 
    				{
    					throw e1;	
    				}
    				if(tmpFile != null && tmpFile.exists()) tmpFile.delete();
    				throw e;
    		}
     
    		return count; 	
    	}

    Ce ne sont que des bouts de codes pour te donner une idée

    voilu

  3. #3
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    salut,

    1.c'est quoi le :
    String serverBase = WebstartProperties.getString("URL_Appication");
    cela m'indique une erreur en rouge de compilation et je ne vois pas trop ce comment l'appliquer.
    j'ai le choix entre créer une classe de ce genre ou le changer avec PROPERTIES.
    D'après toi que dois-je faire?

    2. J'ai remplacer ce "WebstartProperties" par le chemin du serveur tomcat http://localhost:8085/
    puis j'apel la via mon listener du bouton "transferer" la méthode upload avec comme paramètre ceci : upload(file, "C:/Users/olive/Desktop", "application/doc");

    donc si j'ai bien compris cette méthode transferera le fichier dans le bureau. mais apparemment ce n'est pas le cas.

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String serverBase = WebstartProperties.getString("URL_Appication");
    ce bout de code correspondait dans mon cas à la récupération de l'url d'accès a mon application J2EE dans un fichier properties ou WebstartProperties est le nom de ma classe qui me permet de les récupérer.

    donc pour toi sa donnerai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    String serverBase = "http://localhost:8085/MonapplicationContext"

  5. #5
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    salut,

    l'appli m'affiche cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    java.lang.NegativeArraySizeException
    	TDF.doGet(TDF.java:24)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    lorsque j'éxécute ton code coté serveur a cause de cette ligne en gras :

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletInputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class TDF extends HttpServlet {
       
       public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
    //    On ouvre le flux et on commence la récupération du fichier        
          ServletInputStream sis = request.getInputStream();
          int len = request.getContentLength();
          
          
          byte[] buff = new byte[len];
          BufferedInputStream in = new BufferedInputStream(sis, buff.length);
          try {
             createFile(in);
          }
          catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
    
       }
    
    
    
    
        public int createFile(BufferedInputStream in) throws Exception {
    
           int count = 0;
    
           File tmpFile = new File("C:/Users/olive/Desktop/tmp", "exemple.html");
           BufferedOutputStream out = null;
           FileOutputStream fos = null;
           try 
           {
              if (tmpFile.exists()) tmpFile.delete();
              tmpFile.createNewFile();
              fos = new FileOutputStream(tmpFile);
              byte[] buff = new byte[8192];
              out = new BufferedOutputStream(fos, buff.length);
              int i;
              while ((i = in.read(buff,0,buff.length)) != -1)
              { 
                 out.write(buff,0,i);
                 count += i;
                 /*
                String nulle = null;
                nulle.toLowerCase();
                  */
              }           
              tmpFile = null;
    
              out.close();
              fos.close();
           }
           catch(Exception e)
           {
              try {
                 out.close();
                 fos.close();
              }
              catch (IOException e1) 
              {
                 throw e1;   
              }
              if(tmpFile != null && tmpFile.exists()) tmpFile.delete();
              throw e;
           }
    
           return count;  
        }
       
       public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
          //on passe la main au Get
          doGet(request, response);
       }
    }
    Qu'est que cela veut bien pouvoir dire

  6. #6
    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
    Ca voudrait dire que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int len = request.getContentLength();
    te renvoie une valeur négative

    D'après la javaDoc :

    Returns the length, in bytes, of the content contained in the request and sent by way of the input stream or -1 if the length is not known. Same as the value of the CGI variable CONTENT_LENGTH.
    Returns:
    an integer containing the length of the content in the request or -1 if the length is not known


    Après pour l'interpreter je sais pas (ce ne sont que des hypotheses):
    Ta servlet na rien reçu ou le fichier est volumineux et la taille est inconnue

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

Discussions similaires

  1. [XML] Web service, qui envoi et recoit des fichiers XML
    Par j3r3m067 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/11/2010, 11h13
  2. [RSA]Encryption qui donne des fichiers vides
    Par Janitrix dans le forum Sécurité
    Réponses: 5
    Dernier message: 27/05/2007, 01h36
  3. servlet qui supprime des balises xml
    Par samia13 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/05/2007, 11h41
  4. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  5. [VB.NET] Classe qui pilote des Fichier .INI
    Par sygale dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 20h04

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