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 :

Retourner un fichier dans le body d'une requête C++ Rest SDK


Sujet :

C++

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Par défaut Retourner un fichier dans le body d'une requête C++ Rest SDK
    Bonjour,

    Je voudrais savoir s'il est possible de retourner un fichier dans le body d'une requête avec la librairie Rest SDK de Microsoft, j'ai déjà tenté tant bien que mal, je n'ai pas trouvé, j'ai également eu l'idée d'utiliser la librairie libcurl.

    L'idée, c'est qu'en allant sur mon adresse exemple : "localhost/monrepo/nomdufichier.png" je peux télécharger mon fichier : "nomdufichier.png"

    Vous avez une idée si vous avez déjà utilisé ces deux ou une de ces deux librairies ?
    Je récupère bien la récupère avec le pattern défini de mon url "localhost/monrepo/", quel répertoire et quel fonction appelé avec la librairie REST SDK, dans lequel je récupère le nom de fichier s'il existe directement depuis l'url, j'ouvre ce fichier, mais je ne vois pas comment le retourner dans le body de ma requête pour qu'il se télécharge directement sur le poste du client.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Par défaut
    J'ai également utilisé winsock comme librairie pour faire transité mes fichiers, mais le problème, c'est que je peux seulement retourner le binaire de mon fichier qui va être interprété comme une chaine de caractère par mon navigateur..
    Vous n'avez pas une idée ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Pour retourner un fichier à télécharger il faut surtout les bon headers dans ta requête.
    C'est un problème web ça.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Par défaut
    Mon problème ce n'est pas vraiment ça, j'ai l'adresse de mon serveur avec son port, genre en local: "127.0.0.1:8080" , et je voudrais pouvoir lire ce qui a pu être écrit genre : "127.0.0.1:8080/unrepertoirequelconque" , je voudrais récupérer toute l'adresse et le pattern "/unrepertoirequelconque" avec la librairie winsock.

    Un peu de code:

    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
     
     
    auto sendFile() {
     
    	WSADATA WSAData;
    	SOCKET sock;
    	SOCKET csock;
    	SOCKADDR_IN sin;
    	SOCKADDR_IN csin;
     
    	WSAStartup(MAKEWORD(2, 0), &WSAData);
    	sock = socket(AF_INET, SOCK_STREAM, 0);
    	sin.sin_addr.s_addr = INADDR_ANY;
    	sin.sin_family = AF_INET;
    	sin.sin_port = htons(8080); //Le port sur lequel on veut se connecter
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
    	listen(sock, 0);
     
    	int sinsize = sizeof(csin);
    	if ((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
    	{
    		// RetCode = connect(csock, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr));
    		send(csock, image, size, 0);
    		closesocket(csock);
    	}
     
    	WSACleanup();
     
    }
    Je sais que je devrais utiliser "recv", mais après avoir cherché toute la journée, je bloque là-dessus, comment je peu récupérer l'url tapé par l'utilisateur.
    Je cherche à faire ça, car si le pattern du chemin correspond à un répertoire et un fichier existant, alors je passe dans ma condition.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Ton problème n'a maintenant plus rien à voir avec l'original...
    Quel problème sommes-nous donc sencés résoudre ?? Envoyer un fichier ou récupérer une URL ??
    Il existe des libs web pour ça parce que c'est loin d'être simple.
    Ce n'est pas du tout un simple recv mais tout un protocole à implémenter, avec ses règles et normes qu'il faut étudier et supporter.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Par défaut
    J'ai deux potentielles solutions pour mon problème.
    J'utilise deux librairies dans tout mon code, "Rest SDK" et "winsock".
    Avec la librairie "Rest SDk" , je peux créer un url custom et récupérer le pattern de l'url que l'utilisateur a appelé et donc voir par la suite si mon fichier existe.

    Le problème avec cette première solution, c'est que je n'arrive pas à retourner de fichier dans le body de la requête, que ce soit un "fstream", "istream" ou un tableau de "char" .

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    		http_response response(status_codes::OK);
    		response.set_body(image);
     
                    return request.reply(200, response);
    Toutes les solutions que j'ai testées, soit j'ai rien qui s'affiche, soit il tourne en boucle, soit il ne compile pas.
    Je cherche donc une solution pour envoyer mon fichier, si cela fonctionne, j'aurais mon fichier lié à ce lien.

    Pour la solution avec la librairie winsock, j'arrive bien à envoyer correctement mon fichier, cela fonctionne.
    Mais pour créer une root custom pour pouvoir télécharger un fichier spécifique depuis un pattern, du genre : "127.0.0.1/monrepo/monimage.png" , j'ai besoin de récupérer l'url et son chemin.
    Si au moins je peux récupérer l'url, je peux me débrouiller pour définir si le chemin existe ou non.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Et comme je l'ai dit dans ma première réponse, ton problème est un problème web.
    HTTP c'est pas un protocole simple et il est super souple mais y'a des limites.
    Les headers sont pas (tous) là pour décorer. Tu n'en mets aucun, il fait de son mieux pour parvenir à un truc mais il y arrive pas forcément.
    https://lmgtfy.com/?q=http+response+...+download+file
    https://www.designedbyaturtle.co.uk/...aders-and-php/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur Logiciel
    Inscrit en
    Décembre 2015
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2015
    Messages : 230
    Par défaut
    Bon, j'ai réussi à trouver la solution à mon problème tout seul finalement.
    J'ai réussi une de mes deux solutions, j'ai finalement juste réussi à retourner tout sous forme de chaine de caractère dans le body de ma réponse avec la librairie Rest SDK, j'ai pu optimiser mon code et ne pas importer plusieurs librairies inutiles et non nécessaire.
    Merci pour vos aides.

    Bousk, merci pour ta réponse, je le savais déjà plus ou moins, ce que je cherchais c'était une solution comment pouvoir retourner le contenu de mon fichier pour qu'il soit interprété comme par le client.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/03/2010, 23h45
  2. Réponses: 1
    Dernier message: 18/11/2008, 21h42
  3. retourner un fichier dans la réponse en portlet
    Par progamer54 dans le forum JSF
    Réponses: 1
    Dernier message: 14/04/2007, 17h47
  4. probleme avec une methode static dans le body d'une jsp
    Par amadou.deme dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 19/02/2007, 08h47
  5. Fichier dans un champ d'une table
    Par BOUBOU81 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/10/2006, 17h02

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