Maison >développement back-end >tutoriel php >Comment télécharger un fichier et des données de chaîne à l'aide de HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Comment télécharger un fichier et des données de chaîne à l'aide de HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 01:49:09334parcourir

How to Upload a File and String Data Using HTTP POST Multipart/Form-Data in Windows Phone 8?

Téléchargement d'un fichier sur un serveur à l'aide de HTTP POST Multipart/Form-Data dans Windows Phone 8

Vous essayez de télécharger une base de données SQLite à un service Web PHP via une requête HTTP POST avec le type MIME multipart/form-data et une chaîne de données supplémentaire "userid=SOME_ID". Cependant, votre code actuel ne fonctionne pas comme prévu.

Le type MIME "multipart/form-data" permet la transmission de données de formulaire ainsi que de données binaires complexes telles que des fichiers. Il est largement utilisé pour le téléchargement de fichiers dans les applications Web.

Pour surmonter les difficultés rencontrées dans le code de votre Windows Phone 8, pensez à utiliser les fonctions intégrées suivantes :

  1. CreateFormBodyAsync() : Cette fonction crée un corps de formulaire avec le spécifié content.
  2. HttpUtility.UrlEncode() : Cette fonction encode en URL la chaîne "userid".
  3. HttpRequest.AddString() : Ceci La fonction ajoute la chaîne "userid" au corps de la requête.

Voici une version améliorée version de votre code :

async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(DBNAME);
    byte[] fileBytes = null;
    using (var stream = await file.OpenReadAsync())
    {
        fileBytes = new byte[stream.Size];
        using (var reader = new DataReader(stream))
        {
            await reader.LoadAsync((uint)stream.Size);
            reader.ReadBytes(fileBytes);
        }
    }

    HttpPost(fileBytes);
}

private async void HttpPost(byte[] fileBytes)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data";
    httpWebRequest.Method = "POST";
    using (var formBody = new HttpFormBody())
    {
        formBody.AddString("userid", HttpUtility.UrlEncode("SOME_ID"));
        httpWebRequest.AddString(formBody.CreateFormField());
    }

    using (var dataStream = await httpWebRequest.GetRequestStreamAsync())
    {
        dataStream.Write(fileBytes, 0, fileBytes.Length);
        dataStream.Close();
    }

    var asyncResult = httpWebRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), httpWebRequest);
}

Cette modification ajoute la chaîne "userid" au corps de la requête à l'aide de la méthode HttpRequest.AddString(). Cela garantit également que les octets du fichier sont ajoutés à la fin du corps de la requête. En utilisant ces fonctions, vous pouvez transmettre efficacement à la fois le fichier et les données de chaîne supplémentaires dans la requête HTTP POST, satisfaisant ainsi les exigences multipart/form-data.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn