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

C++ Discussion :

[C++] Uploader un fichier


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par d�faut [C++] Uploader un fichier
    Bonjour,

    Je suis actuellement en train de coder un petit programme en C++ qui doit envoyer un fichier texte sur mon serveur FTP par le biais d'une page PHP.
    Voil� son code (r�duit au stricte minimum sans gestions d'erreurs) :

    Code php : 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
    <body>
    <FORM METHOD="POST" ENCTYPE="multipart/form-data">
    <INPUT TYPE="hidden" NAME="MAX_FILE_SIZE" VALUE="100000"> Fichier à envoyer : <INPUT TYPE="file" NAME="fichier">
    <INPUT TYPE="submit" NAME="OK" VALUE="Envoyer">
    </FORM>
     
    <?php
    if (isset($_POST["OK"]))
    {
        $nom = $_FILES["fichier"]["name"];
        $temporaire = $_FILES["fichier"]["tmp_name"];
        $destination = "$nom";
        copy($temporaire,$destination);
    }
    ?>
     
    </body>

    Mais je ne sais pas comment faire pour envoyer � la page php le fichier � uploader en utilisant la m�thode POST.

    j'ai entendu parler des sockets et d'une librairie libcurl mais je ne connais pas du tout cela.

    Si vous pourriez m'indiquer la m�thode � utiliser et comment l'utiliser je serait ravi ! Merci

  2. #2
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Tu peux utiliser le module network de sfml pour des trucs simples au niveau r�seau.

    http://www.sfml-dev.org/index-fr.php
    http://www.sfml-dev.org/tutorials/1....rk-http-fr.php

    C'est vraiment simple � utiliser.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par d�faut
    Merci beaucoup je testerais �a demain

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par d�faut
    J'ai install� SFML qui � l'aire vraiment bien, j'ai suivi le tuto d'ici :
    http://www.sfml-dev.org/tutorials/1....rk-http-fr.php
    Le probl�me c'est que leur exemple c'est avec la m�thode GET
    Le fonctionnement de la m�thode POST n'a pas l'aire beaucoup diff�rente mais j'ai un souci car pour la ligne Request.SetBody(""); il dise :
    Un corps, qui est le contenu � envoyer si la m�thode est Post; ce membre est ignor� si la m�thode est Get ou Head
    J'ignore ce qu'il faut mettre dans dans le SetBody();
    Pour le moment mon code ressemble � �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int main()
    {
        sf::Http::Request Request;
        Request.SetMethod(sf::Http::Request::Post);
        Request.SetURI("http://world.power-heberg.com/upload/upload.php");
        Request.SetBody("");
        Request.SetHttpVersion(1, 0);
        //Request.SetField("From", "[email protected]");
     
        return 0;
    }

  5. #5
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    Ne t'inqui�te pas, tu utilises bien la m�thode POST:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
        Request.SetMethod(sf::Http::Request::Post);
    Ensuite le probl�me c'est de savoir comment sont envoy�es les donn�es par POST.

    Je verrais bien quelque chose comme �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    string request = "variable=\"contenu\"\r\nvariable2=\"contenu2\"";
    Request.SetBody(request);
    Request.SetField("Content-Length", request.length());
    Essaie d'abord avec des exemples simples, pour voir si �a marche.
    Ensuite peut-�tre qu'il faudra �chapper tous les " du fichier pour que le fichier soit bien consid�r� comme une seule et m�me variable.

    Enfin l'essentiel c'est de faire des tests!


    Edit:

    j'ai vu que les diff�rents champs �taient s�par�s par des '&':

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    string request = "variable=contenu&variable2=contenu2";
    Request.SetBody(request);
    Request.SetField("Content-Length", request.length());
    Mais si contenu contient des caract�res & il faudra trouver une solution (guillemets, �chappements, caract�res sp�ciaux, ...)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par d�faut
    Je fait des tests simples �a fonction presque.

    j'ai une page php comme �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    	if ( $_POST["nom"] == "test" )
    		fopen("OK.txt", "a");
    	else
    		fopen("ERREUR.txt", "a");
    ?>
    Pour la tester avec mon navigateur web j'ai une page html comme �a :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <html>
    <head>
    </head>
    	<form action="action.php" method="POST">
    		<input type="text" name="nom"/>
    		<input type="submit" name="OK" value="Connexion"/>
    	</form>
    </body>
    </html>
    �a marche parfaitement avec mon navigateur !!

    Donc pour tester avec mon projet en C++ j'ai mis �a :

    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
     
        sf::Http Http;
        Http.SetHost("www.world.power-heberg.com");
     
        string envoye = "nom=test";
        sf::Http::Request Request;
        Request.SetMethod(sf::Http::Request::Post);
        Request.SetURI("/upload/action.php");
        Request.SetBody(envoye);
        Request.SetHttpVersion(1, 0);
        //Request.SetField("nom=test", "nom=test");
     
        sf::Http::Response Page = Http.SendRequest(Request);
     
        std::cout << "Reponse de mon serveur" << std::endl
                  << "Status code (should be 200 on success): " << Page.GetStatus() << std::endl
                  << "HTTP version: " << Page.GetMajorHttpVersion() << "." << Page.GetMinorHttpVersion() << std::endl;
     
        return EXIT_SUCCESS;
    Malheureusement �a cr�er le fichier ERREUR.txt alors que la variable envoye est bien "nom=test" ce qui devrait cr�er un fichier OK.txt.

    Ps : Merci pour ton aide

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 8
    Par d�faut
    C'est bon j'ai r�ussi :
    Il fallait mettre la ligne :
    Request.SetField("Content-Type", "application/x-www-form-urlencoded");
    (Merci Wireshark)

    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
     
        sf::Http Http;
        Http.SetHost("www.world.power-heberg.com");
     
        string envoye = "nom=test";
        sf::Http::Request Request;
        Request.SetMethod(sf::Http::Request::Post);
        Request.SetURI("/upload/action.php");
        Request.SetBody("nom=test");
        Request.SetHttpVersion(1, 0);
        Request.SetField("Content-Type", "application/x-www-form-urlencoded");
     
        sf::Http::Response Page = Http.SendRequest(Request);
     
        std::cout << "Reponse de mon serveur" << std::endl
                  << "Status code (should be 200 on success): " << Page.GetStatus() << std::endl
                  << "HTTP version: " << Page.GetMajorHttpVersion() << "." << Page.GetMinorHttpVersion() << std::endl;
     
        return EXIT_SUCCESS;
    Merci encore pour ton aide

  8. #8
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    D�tails du profil
    Informations personnelles :
    �ge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par d�faut
    C'est bizarre, ce bug avait �t� signal� et le champ �tait cens� �tre mis par d�faut.

    Je suppose que ce n'est vrai que pour la version en d�veloppement.

    En tout cas content que tu aies r�ussi.

  9. #9
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    En effet, ce bug a �t� corrig� apr�s la sortie de la derni�re version.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [FTP] Probl�me pour uploader un fichier
    Par Crazyblinkgirl dans le forum Entr�e/Sortie
    R�ponses: 10
    Dernier message: 07/01/2008, 22h21
  2. Upload de fichier par XMLHTTP
    Par Immobilis dans le forum ASP
    R�ponses: 6
    Dernier message: 21/01/2005, 17h02
  3. upload de fichier
    Par 120 dans le forum ASP
    R�ponses: 16
    Dernier message: 21/06/2004, 12h07
  4. Upload de fichiers sur un ftp
    Par Crazyblinkgirl dans le forum ASP
    R�ponses: 10
    Dernier message: 20/06/2004, 11h55
  5. Upload de fichiers
    Par GDVL dans le forum ASP
    R�ponses: 4
    Dernier message: 03/06/2004, 12h44

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