Datei mit HTTP POST Multipart/Form-Data in Windows Phone und Windows 8 auf einen Server hochladen
Das Hochladen von Dateien auf einen Webserver ist eine häufige Aufgabe in der mobilen Entwicklung. In diesem Leitfaden erfahren Sie, wie Sie dies mit HTTP-POST-Multipart-/Formulardaten sowohl unter Windows Phone 8 als auch unter Windows 8 mithilfe nativer APIs erreichen können.
Windows Phone 8-Implementierung
Sie haben versucht, eine Datei mithilfe von HTTP POST mit Multipart-/Formulardaten auf Ihren PHP-Webdienst hochzuladen, sind dabei jedoch auf Probleme gestoßen. Ihr Code übergibt den Parameter „userid“ nicht wie erwartet. Um dieses Problem zu beheben, ändern Sie Ihren Code so, dass er den Parameter „userid“ in die Formulardaten einschließt.
Hier ist ein Beispiel dafür:
private void GetRequestStreamCallback(IAsyncResult asynchronousResult, byte[] postData) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; Stream postStream = request.EndGetRequestStream(asynchronousResult); string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundary_bytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); // Write the "userid" parameter postStream.Write(boundary_bytes, 0, boundary_bytes.Length); byte[] userid_bytes = Encoding.ASCII.GetBytes("Content-Disposition: form-data; name=\"userid\"\r\n\r\n" + "SOME_ID" + "\r\n"); postStream.Write(userid_bytes, 0, userid_bytes.Length); // Write the file data postStream.Write(boundary_bytes, 0, boundary_bytes.Length); byte[] file_content_disposition_bytes = Encoding.ASCII.GetBytes("Content-Disposition: form-data; name=\"file\"; filename=\"database.sqlite\"\r\nContent-Type: application/octet-stream\r\n\r\n"); postStream.Write(file_content_disposition_bytes, 0, file_content_disposition_bytes.Length); postStream.Write(postData, 0, postData.Length); // Write the ending boundary postStream.Write(boundary_bytes, 0, boundary_bytes.Length); byte[] end_boundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); postStream.Write(end_boundary, 0, end_boundary.Length); postStream.Close(); var asyncResult = request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); }
In diesem Code ist der Parameter „userid Der Parameter „wird zusammen mit den Dateidaten übergeben. Stellen Sie sicher, dass Ihr PHP-Webdienst die Parameter in diesem Format erwartet.
Windows 8-Implementierung
Für Windows 8 haben Sie versucht, HttpClient und MultipartFormDataContent zum Hochladen der Datei zu verwenden , aber es ist auch gescheitert. Das Problem liegt möglicherweise im falschen Inhaltstyp für die Dateidaten. Ändern Sie Ihren Code, um den richtigen Inhaltstyp anzugeben:
form.Add(new ByteArrayContent(file_bytes, 0, file_bytes.Length), "file", "hello1.jpg", "application/octet-stream");
Dieser Code setzt den Inhaltstyp für die Dateidaten korrekt auf „application/octet-stream“.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie lade ich Dateien mit HTTP POST Multipart/Form-Data in Windows Phone 8 und Windows 8 auf einen Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!