Maison > développement back-end > C++ > Comment télécharger correctement des fichiers sur un serveur à l'aide de HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Comment télécharger correctement des fichiers sur un serveur à l'aide de HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Linda Hamilton
Libérer: 2025-01-21 04:12:09
original
195 Les gens l'ont consulté

How to Correctly Upload Files to a Server using HTTP POST Multipart/Form-Data in Windows Phone 8?

Télécharger correctement les fichiers sur le serveur dans Windows Phone 8 à l'aide de HTTP POST Multipart/Form-Data

Dans le développement Web, le téléchargement de fichiers sur le serveur à l'aide de HTTP POST avec multipart/form-data est une tâche courante. Cet article résoudra les problèmes rencontrés lors de l'utilisation de HTTPWebRequest pour télécharger des fichiers dans les applications Windows Phone 8 et fournira une solution améliorée.

Code original dans Windows Phone 8

L'implémentation d'origine utilise HttpWebRequest pour envoyer des requêtes POST multipart/form-data. Cependant, le code tente à tort d’envoyer l’intégralité du fichier sans les métadonnées associées. Les requêtes multipart/form-data doivent spécifier les limites des fichiers et les en-têtes de données de formulaire nécessaires.

Solutions améliorées pour Windows Phone 8

Pour résoudre ce problème, voici le code modifié :

<code class="language-csharp">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);
        }
    }

    string boundary = Guid.NewGuid().ToString();
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;
    httpWebRequest.Method = "POST";

    httpWebRequest.BeginGetRequestStream(GetRequestStreamCallback, new object[] { fileBytes, boundary });
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult, object state)
{
    object[] stateData = (object[])state;
    byte[] postData = (byte[])stateData[0];
    string boundary = (string)stateData[1];
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    Stream postStream = request.EndGetRequestStream(asynchronousResult);

    //写入起始边界
    byte[] boundaryBytes = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

    //写入文件数据
    string filename = DBNAME;
    byte[] fileData = System.Text.Encoding.UTF8.GetBytes($"Content-Disposition: form-data; name=\"file\"; filename=\"{filename}\"\r\nContent-Type: application/octet-stream\r\n\r\n");
    postStream.Write(fileData, 0, fileData.Length);
    postStream.Write(postData, 0, postData.Length);

    //写入结束边界
    boundaryBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);

    postStream.Close();
    request.BeginGetResponse(GetResponseCallback, request);
}

private void GetResponseCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
    using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
    using (Stream streamResponse = response.GetResponseStream())
    using (StreamReader streamRead = new StreamReader(streamResponse))
    {
        string responseString = streamRead.ReadToEnd();
        // 处理服务器响应
    }
}</code>
Copier après la connexion

Conclusion

Ce code modifié devrait résoudre les problèmes de téléchargement de fichiers dans les applications Windows Phone 8. N'oubliez pas que lorsque vous utilisez des requêtes multipart/form-data, veillez à spécifier correctement les limites et à fournir les en-têtes nécessaires pour le fichier et les métadonnées qui l'accompagnent. Un en-tête Content-Disposition plus clair a été ajouté au code et des instructions using sont utilisées pour garantir la libération correcte des ressources.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal