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.
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.
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).
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); }
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!