Maison > développement back-end > tutoriel php > Comment réussir à télécharger des fichiers et à transmettre des paramètres supplémentaires avec HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Comment réussir à télécharger des fichiers et à transmettre des paramètres supplémentaires avec HTTP POST Multipart/Form-Data dans Windows Phone 8 ?

Patricia Arquette
Libérer: 2024-12-15 00:19:10
original
783 Les gens l'ont consulté

How to Successfully Upload Files and Pass Additional Parameters with HTTP POST Multipart/Form-Data in Windows Phone 8?

Téléchargement de fichiers avec HTTP POST Multipart/Form-Data dans Windows Phone 8

Lors du développement d'applications Windows Phone 8, il est courant de devoir télécharger des fichiers sur un serveur. Ceci peut être réalisé en utilisant HTTP POST avec le type MIME multipart/form-data. Cependant, il existe des considérations spécifiques pour Windows Phone 8.

Exemple de code et explication de l'erreur

L'exemple de code fourni tente de télécharger un fichier et de transmettre un paramètre de chaîne ("userid=SOME_ID") en utilisant HTTP POST multipart/form-data. Cependant, il rencontre un problème où le fichier n'est pas téléchargé correctement.

Le problème spécifique réside dans la méthode GetRequestStreamCallback. Le flux de requête est obtenu à l'aide de request.EndGetRequestStream(asynchronousResult), mais le paramètre "userid=some_user_id" n'est pas ajouté à la requête.

Passer des paramètres supplémentaires

Pour transmettre des paramètres supplémentaires tels que " userid", il est nécessaire de créer une limite pour la requête multipart/form-data. Cette limite sépare les différentes parties de la requête (fichier et paramètres supplémentaires).

Exemple de code amélioré

Voici un exemple de code amélioré qui gère correctement les requêtes multipart/form-data et transmet des paramètres supplémentaires :

private void HttpPost(byte[] fileBytes, string additionalParam)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data; boundary=---------------------------" + DateTime.Now.Ticks.ToString("x");
    httpWebRequest.Method = "POST";
    var asyncResult = httpWebRequest.BeginGetRequestStream((ar) => { GetRequestStreamCallback(ar, fileBytes, additionalParam); }, httpWebRequest);  
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult, byte[] postData, string additionalParam)  
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;  
    Stream postStream = request.EndGetRequestStream(asynchronousResult); 

    // Create boundary start string
    string boundaryStart = "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1);

    // Write file content
    string fileBoundary = boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"file\"; filename=\"myfile.db\"" + Environment.NewLine + "Content-Type: application/octet-stream" + Environment.NewLine + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(fileBoundary), 0, fileBoundary.Length);   
    postStream.Write(postData, 0, postData.Length);  

    // Write additional parameter
    string paramBoundary = Environment.NewLine + boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"userid\"" + Environment.NewLine + Environment.NewLine + additionalParam + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(paramBoundary), 0, paramBoundary.Length);   

    // Write boundary end string
    string boundaryEnd = Environment.NewLine + "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1) + "--" + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(boundaryEnd), 0, boundaryEnd.Length);  

    postStream.Close();  
    var asyncResult = request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);  
}  
Copier après la connexion

En suivant ces directives, vous pouvez réussir à télécharger des fichiers sur un serveur et transmettre des paramètres supplémentaires à l'aide de HTTP POST multipart/form-data dans Windows Phone 8. candidatures.

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