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

WinRT Discussion :

Upload d'une fichier sur un serveur avec Windows Store App [Débutant]


Sujet :

WinRT

  1. #1
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Upload d'une fichier sur un serveur avec Windows Store App
    Salut là tous! Je développe actuellement une application Windows Store Apps and je voudrais envoyer (uploader) un fichier txt sur un serveur phpMyAdmin.
    J'y arrive en créant une application console avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WebClient wc = new WebClient();             
    wc.UploadFile(uri, pathFile);
    Mais je suis incapable d'y arriver lorsque je veux le faire pour mon application Windows Store Apps. Le moyen que j'ai trouvé pour y arriver est le suivant :

    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
    var filePicker = new FileOpenPicker();
            filePicker.FileTypeFilter.Add(".txt");
            var file = await filePicker.PickSingleFileAsync();
     
            using (var randomStream = (await file.OpenReadAsync()))
            {
                using (var stream = randomStream.AsStream())
                {
                    using (var content = new StreamContent(stream))
                    {
                        var httpClient = new HttpClient();
                        await httpClient.PostAsync(uri, content);
                    }
                }
            }
    Mais ce code ne semble pas marcher et je ne sais pas pourquoi car tout le monde semble dire que c'est la manière pour y arriver. En utilisant ce code je ne vois aucun fichier sur le serveur contrairement qu'avec le premier code.

    Quelqu'un pourrait il m'aider ou m'indiquer ce qui ne va pas dans ma démarche ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu dois pas être très loin du compte, le code semble correct mais il manque peut-être quelques en-têtes...

    Pour commencer, vérifie la réponse pour voir si le serveur ne renvoie pas une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                        var httpClient = new HttpClient();
                        var response = await httpClient.PostAsync(uri, content);
                        response.EnsureSuccessStatusCode();
    Regarde les détails de l'exception (message, InnerException, statut de la réponse etc) s'il y en a une.

    Ensuite, tu peux essayer de spécifier les en-têtes suivants :
    - Content-Length (taille du fichier) (je pense que c'est fait automatiquement par StreamContent, mais tu peux toujours essayer de le spécifier manuellement)
    - Content-Disposition : pour indiquer le nom du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		var httpClient = new HttpClient();
    		var request = new HttpRequestMessage(HttpMethod.Post, uri);
    		request.Content = content;
    		request.Content.Headers.ContentLength = (ulong)stream.Length;
    		request.Content.ContentDisposition = new HttpContentDispositionHeaderValue("attachment")
    		{
    		    FileNameStar = file.Name
    		};
    		var response = await httpClient.SendAsync(request);
    		response.EnsureSuccessStatusCode();
    (FileNameStar est pareil que FileName, mais utilise un encodage particulier qui permet de mieux supporter les caractères internationaux, genre accents, cédilles etc ; si le serveur ne le supporte pas, utilise FileName à la place)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Software engineer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Software engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu dois pas être très loin du compte, le code semble correct mais il manque peut-être quelques en-têtes...

    Pour commencer, vérifie la réponse pour voir si le serveur ne renvoie pas une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                        var httpClient = new HttpClient();
                        var response = await httpClient.PostAsync(uri, content);
                        response.EnsureSuccessStatusCode();
    Regarde les détails de l'exception (message, InnerException, statut de la réponse etc) s'il y en a une.

    Ensuite, tu peux essayer de spécifier les en-têtes suivants :
    - Content-Length (taille du fichier) (je pense que c'est fait automatiquement par StreamContent, mais tu peux toujours essayer de le spécifier manuellement)
    - Content-Disposition : pour indiquer le nom du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		var httpClient = new HttpClient();
    		var request = new HttpRequestMessage(HttpMethod.Post, uri);
    		request.Content = content;
    		request.Content.Headers.ContentLength = (ulong)stream.Length;
    		request.Content.ContentDisposition = new HttpContentDispositionHeaderValue("attachment")
    		{
    		    FileNameStar = file.Name
    		};
    		var response = await httpClient.SendAsync(request);
    		response.EnsureSuccessStatusCode();
    (FileNameStar est pareil que FileName, mais utilise un encodage particulier qui permet de mieux supporter les caractères internationaux, genre accents, cédilles etc ; si le serveur ne le supporte pas, utilise FileName à la place)
    Salut, merci pour ta réponse. Alors oui je n'avais pas précisé mais en fait le serveur ne me renvoyait pas d'erreur.

    Néanmoins j'ai trouvé le moyen d'uploader un fichier et voici le code que j'utilise au cas où quelqu'un rencontrerait le même problème :

    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
    public async void SendReport(string nameFile, string path, string nameServer)
    {
    	var file = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(nameFile);
     
    	var randomStream = await file.OpenReadAsync();
    	var stream = randomStream.AsStream();
    	var content = new StreamContent(stream);
    	MultipartFormDataContent form = new MultipartFormDataContent();
    	form.Add(content, "file", path);
     
    	HttpClient http = new System.Net.Http.HttpClient();
    	HttpResponseMessage response = await http.PostAsync(urlServer, form);
     
    	await response.Content.ReadAsStringAsync();
    	bool check = response.IsSuccessStatusCode;
    }
    C'est l'utilisation de "MultipartFormDataContent" qui a permis de résoudre mon problème.

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

Discussions similaires

  1. [CSV] Télécharger un fichier sur le serveur avec une URL
    Par bolandfranck dans le forum Langage
    Réponses: 2
    Dernier message: 23/06/2007, 13h33
  2. [XML] Créer un fichier sur le serveur avec le contenu d'une requête POST
    Par kingmandrax dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 27/10/2006, 00h18
  3. [Upload] Envoi de fichier sur un serveur
    Par SanTa62 dans le forum Langage
    Réponses: 4
    Dernier message: 10/01/2006, 21h51
  4. [Servlet][Tomcat] Upload d'un fichier sur le serveur
    Par gandalf_le_blanc dans le forum Tomcat et TomEE
    Réponses: 7
    Dernier message: 19/04/2004, 13h56

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