Upload File to Server with HTTP POST Multipart/Form-Data in Windows Phone and Windows 8
Uploading files to a web server is a common task in mobile development. In this guide, we'll explore how to achieve this with HTTP POST multipart/form-data using both Windows Phone 8 and Windows 8 using native APIs.
Windows Phone 8 Implementation
You attempted to upload a file to your PHP web service using HTTP POST with multipart/form-data, but encountered issues. Your code does not pass the "userid" parameter as expected. To resolve this, modify your code to include the "userid" parameter within the form data.
Here's an example of how to do it:
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 this code, the "userid" parameter is passed along with the file data. Ensure that your PHP web service is expecting the parameters in this format.
Windows 8 Implementation
For Windows 8, you attempted to use HttpClient and MultipartFormDataContent to upload the file, but it also failed. The issue may lie in the incorrect content type for the file data. Modify your code to specify the correct content type:
form.Add(new ByteArrayContent(file_bytes, 0, file_bytes.Length), "file", "hello1.jpg", "application/octet-stream");
This code correctly sets the content type to "application/octet-stream" for the file data.
Additional Notes
The above is the detailed content of How to Upload Files to a Server Using HTTP POST Multipart/Form-Data in Windows Phone 8 and Windows 8?. For more information, please follow other related articles on the PHP Chinese website!