Bei der Entwicklung von Windows Phone 8-Anwendungen ist es üblich, Dateien auf einen Server hochzuladen. Dies kann mithilfe von HTTP POST mit dem MIME-Typ multipart/form-data erreicht werden. Es gibt jedoch spezielle Überlegungen für Windows Phone 8.
Das bereitgestellte Codebeispiel versucht, eine Datei hochzuladen und einen Zeichenfolgenparameter („userid=SOME_ID“) zu übergeben HTTP POST Multipart/Formulardaten. Es tritt jedoch ein Problem auf, bei dem die Datei nicht erfolgreich hochgeladen werden kann.
Das spezifische Problem liegt in der GetRequestStreamCallback-Methode. Der Anforderungsstream wird mit request.EndGetRequestStream(asynchronousResult) abgerufen, aber der Parameter „userid=some_user_id“ wird der Anforderung nicht hinzugefügt.
Zur Übergabe zusätzlicher Parameter wie „ userid“ ist es notwendig, eine Grenze für die Multipart-/Formulardatenanforderung zu erstellen. Diese Grenze trennt die verschiedenen Teile der Anfrage (Datei und zusätzliche Parameter).
Hier ist ein verbessertes Codebeispiel, das mehrteilige/Formulardatenanfragen ordnungsgemäß verarbeitet und zusätzliche Parameter übergibt:
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); }
Wenn Sie diese Richtlinien befolgen, können Sie Dateien erfolgreich auf einen Server hochladen und zusätzliche Parameter mithilfe von HTTP POST Multipart/Formulardaten in Windows Phone 8 übergeben Anwendungen.
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien erfolgreich hoch und übergebe zusätzliche Parameter mit HTTP POST Multipart/Form-Data in Windows Phone 8?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!