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

Tomcat et TomEE Java Discussion :

Copier un fichier vers un serveur distant


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 139
    Points : 68
    Points
    68
    Par défaut Copier un fichier vers un serveur distant
    Bonjour,

    Je ne suis pas sûr de l'endroit où poster alors j'ai mis ici.

    J'ai une application sur un serveur tomcat et avec une jsp je dois copier un fichier vers un serveur distant.

    J'utilise URLConnection pour me connecter au serveur pour y copier des fichiers.
    J'utilise un fichier xml que je génère en le plaçant dans la zone des fichiers temporaires puis j'aimerais le copier vers un serveur distant.

    Voici le code que j'utilise.
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
     
    public static void copyInputStream(InputStream in, OutputStream out)
            throws IOException {
        byte[] buffer = new byte[1024];
        int len;
     
        while ((len = in.read(buffer)) >= 0)
            out.write(buffer, 0, len);
     
        in.close();
        out.close();
    }
     
    public static void deleteFile(File file) {
        if (file == null)
            return;
        if (file.isDirectory()) {
            File[] files = file.listFiles();
            for (File file1 : files) {
                deleteFile(file1);
            }
        }
        file.delete();
    }
     
    File getFile(String webpath, String storepath, String filename) {
        URL url;
        try {
            url = new URL(webpath);
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        }
        URLConnection urlConnection;
        InputStream in = null;
        FileOutputStream out = null;
        try {
            urlConnection = url.openConnection();
            urlConnection.connect();
            in = urlConnection.getInputStream();
            if (in == null) {
                System.err.println("No connection");
                return null;
            }
            File result = new File(storepath, filename);
            out = new FileOutputStream(result);
            copyInputStream(in, out);
            return result;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
     
    static public boolean copier(InputStream sourceFile, OutputStream destinationFile) throws Exception {
     
        boolean resultat = false;
        // Declaration des flux
       // java.io.FileInputStream sourceFile = null;
       // java.io.FileOutputStream destinationFile = null;
     
        try {      
            // Création du fichier :
           // destination.createNewFile();
     
            // Ouverture des flux
           // sourceFile = new java.io.FileInputStream(source);
           // destinationFile = new java.io.FileOutputStream(destination);
     
            // Lecture par segment de 0.5Mo
            byte buffer[] = new byte[512 * 1024];
            int nbLecture;
     
            while ((nbLecture = sourceFile.read(buffer)) != -1) {
                destinationFile.write(buffer, 0, nbLecture);
            }
     
            // Copie réussie
            resultat = true;
        } catch (java.io.FileNotFoundException f) {
        	f.printStackTrace();
            System.out.println("Erreur dans Copie - " + f.getMessage());
        } catch (java.io.IOException e) {
            System.out.println("Erreur dans Copie - " + e.getMessage());
        } finally {
            // Quoi qu'il arrive, on ferme les flux
            try {
                sourceFile.close();
            } catch (Exception e) {
            }
            try {
                destinationFile.close();
            } catch (Exception e) {
            }
        }
        return (resultat);
    }
     
    String urlServeur = (String)pageContext.getAttribute("urlServeur");
     
    	String fileExport = (String)pageContext.getAttribute("fileExport");
     
    	String xmlExport = (String)pageContext.getAttribute("urlExport");
     
    	String dirExport = (String)pageContext.getAttribute("dirExport");
     
    	String fileName =""; 
    	String fileExtension ="";
    	URL url;
    	URLConnection urlConnection;
    	OutputStream fserverout;
     
    	if (fileExport == null || fileExport.length()<4){
    		fileExport = "event.xml";
    	}
     
    	// Creation des fichiers dans la zone des fichiers temporaires 
     
    	// On récupère le nom du fichier puis son extension
    	fileName = fileExport.substring(0,fileExport.length()-4);
    	fileExtension = fileExport.substring(fileExport.length()-4,fileExport.length());
    	//Creation du fichier temporaire
        File fXMLTemp = File.createTempFile(fileName,fileExtension);
     
    	OutputStream foutXML = new FileOutputStream(fXMLTemp);
    	foutXML.write(xmlExport.getBytes(request.getCharacterEncoding().toUpperCase()));
    	foutXML.close();
     
            // fichier temporaire xml
    	FileInputStream finXML = new FileInputStream(fXMLTemp);
     
    	File fserver = new File(urlServeur);
     
    	if (dirExport != null && dirExport.length()>0){
    		urlServeur+="/"+dirExport;
    	}
    	urlServeur+="/"+fileExport;
     
    	System.out.println(urlServeur);
     
    	url = new URL(urlServeur);	
    	try{
    		urlConnection = url.openConnection();
    		urlConnection.setDoOutput(true);
    		urlConnection.setAllowUserInteraction(true);
    		urlConnection.connect();
     
    		fserverout = urlConnection.getOutputStream();
     
    		//System.out.println(xmlExport);
    		//System.out.println(urlConnection.getURL());
     
    		copyInputStream(finXML,fserverout);
     
    		//copier(finXML,fserverout);
    		//fserverout.write(xmlExport.getBytes(request.getCharacterEncoding().toUpperCase()));
    	}
    	catch(Exception e){
    		e.printStackTrace();
    	}
    Je n'arrive pas à faire le traitement

    J'utilise l'url de mon poste pour voir si c'est un problème de droits mais ça ne marche pas non plus

    J'ai l'impression d'avoir oublié quelque chose comme peut-être un File pour la destination mais comme je dois copier un fichier vers un serveur et donc en utilisant une url de type http://toto.fr


    Merci d'avance pour votre aide

    EDIT : que ce soit avec copier ou copyInputStream c'est la même chose, le fichier à copier ne se créé pas

  2. #2
    Membre confirmé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Points : 558
    Points
    558
    Par défaut
    Bonsoir
    Si tu veux faire utiliser la commande PUT de HTTP, utilise la méthode setRequestMethod de la classe HttpsURLConnection qui étend URLConnection, je ne l'ai jamais fais ... en général je fais du FTP

    Voir aussi http://hc.apache.org/httpclient-3.x/tutorial.html

    Bon courage

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/08/2011, 19h46
  2. [WD14] Copier des fichiers vers un serveur HyperFile C/S
    Par ecoinfo dans le forum WinDev
    Réponses: 1
    Dernier message: 14/06/2010, 20h09
  3. copier un fichier d'un serveur distant sur son pc
    Par lefty01500 dans le forum VBScript
    Réponses: 0
    Dernier message: 18/02/2010, 12h35
  4. Copier un fichier sur un serveur distant par ftp
    Par islyoung2 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/08/2009, 10h13
  5. Réponses: 4
    Dernier message: 11/06/2009, 15h19

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