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 :

Transférer un fichier sur un serveur HTTP


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut Transférer un fichier sur un serveur HTTP
    Bonjour,
    j'essaye de créer un programme Java qui permet de transférer un fichier sur un serveur HTTP.
    Pour cela, j'envoie une requête PUT sur le serveur HTTP en passant par une socket:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sock = new Socket("192.168.0.101", 80);
    out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
    out.write("PUT " + path + " HTTP/1.1");
    out.close();
    out.flush();
    Et le serveur web répond bien quand je regarde mon fichier de logs /var/log/apache/access_log.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    192.168.0.101 - - [27/Jan/2007:15:29:45 +0100] "PUT /home/yugiohjcj/dosbox.conf HTTP/1.1" 400 410
    Mais le fichier n'est pas transféré. Il n'est pas présent à la racine de mon serveur web. Pourtant j'y ai mis les droits d'écriture pour tout le monde. D'ailleur je n'ai pas eu à préciser de chemin de déstination...
    Que faut-il que je fasse pour que le fichier y soit?
    Merci.

  2. #2
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Ok je viens de lire une doc expliquant le fonctionement de PUT.
    C'est plus complexe que la méthode GET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PUT /toto.html HTTP/1.1
     
    Host: www
     
    Content-length: 10
     
     
     
    test 1234
    Donc il faut que je modifie mon programme pour qu'il envoit une requête sous cette forme.

  3. #3
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Avec telnet si je fait la requête j'ai une erreur:
    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
     
    $ telnet localhost 80
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    PUT /toto.txt HTTP/1.1
    Host: www
    Content-length: 10
     
    test 1234
    HTTP/1.1 405 Method Not Allowed
    Date: Sat, 27 Jan 2007 16:08:41 GMT
    Server: Apache/1.3.37 (Unix) PHP/4.4.4
    Allow: GET, HEAD, OPTIONS, TRACE
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=iso-8859-1
     
    12e
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>405 Method Not Allowed</TITLE>
    </HEAD><BODY>
    <H1>Method Not Allowed</H1>
    The requested method PUT is not allowed for the URL /toto.txt.<P>
    <HR>
    <ADDRESS>Apache/1.3.37 Server at YuGiOhJCJ.Geekdomain Port 80</ADDRESS>
    </BODY></HTML>
     
    0
     
    Connection closed by foreign host.
    Donc il va falloir que je configure /etc/apache/httpd.conf pour autoriser le PUT. Mais je sais pas comment faire.

  4. #4
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Je viens de lire que Apache ne peut pas répondre à des requêtes PUT sans l'aide d'un script :
    http://www.apacheweek.com/features/put
    Donc il va falloir que je m'en procure un. Mais on me conseil d'utiliser le protocole FTP qui est plus adapté.
    Qu'en pensez-vous?

  5. #5
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    J'ai du mal à trouver des scripts.
    J'ai obtenu ceci :
    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
     
    <?php
    /* Les données PUT arrivent du flux */
    $putdata = fopen("php://input", "r");
     
    /* Ouvre un fichier pour écriture */
    $fp = fopen("myputfile.ext", "w");
     
    /* Lecture des données, 1 Ko à la fois
    and write to the file */
    while ($data = fread($putdata, 1024))
    fwrite($fp, $data);
     
    /* Fermeture du flux */
    fclose($fp);
    fclose($putdata);
    ?>
    J'ai configuré Apache pour qu'il utilise ce script lorsque la méthode PUT est utilisée. Il est lancé ça créé le fichier myputfile.ext mais il est vide...
    Peut être qu'il y a de meilleurs méthodes pour transférer un fichier par le réseau en Java. Qui peut m'aider?

  6. #6
    Membre confirmé Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Par défaut
    Comme cette méthode pour transférer un fichier est assez complexe, je préfère maintenant essayez celle-ci :
    Un serveur et un client.
    Une DatagramSocket par laquelle est transféré le contenu du fichier.
    Côté client j'ai essayé une lecture caractère par caractère ou ligne par ligne mais je ne m'en sort pas lorsque je souhaite trasnférer par la socket (problème de type car il me faut une String pour convertir en Bytes par la suite ou problème de taille car il ne faut pas dépasser 1024).
    Quelqu'un a une proposition?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2008, 17h40
  2. Réponses: 3
    Dernier message: 11/03/2008, 01h14
  3. Réponses: 4
    Dernier message: 16/07/2007, 17h33
  4. Récupérer un fichier sur un serveur HTTP
    Par Medivh dans le forum WinDev
    Réponses: 2
    Dernier message: 01/04/2007, 22h28
  5. [VBA-E]Ouverture de fichier sur un serveur http
    Par Scritch852 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/03/2007, 12h17

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