在 Windows Phone 8 中使用 HTTP POST 多部分/表单数据将文件上传到服务器
您正在尝试上传 SQLite 数据库通过具有 multipart/form-data MIME 类型和附加字符串数据“userid=SOME_ID”的 HTTP POST 请求发送到 PHP Web 服务。但是,您当前的代码未按预期工作。
“multipart/form-data” MIME 类型可以传输表单数据以及复杂的二进制数据(例如文件)。它广泛用于 Web 应用程序中的文件上传。
要克服 Windows Phone 8 代码中遇到的挑战,请考虑使用以下内置函数:
此处是代码的改进版本:
async void MainPage_Loaded(object sender, RoutedEventArgs e) { var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(DBNAME); byte[] fileBytes = null; using (var stream = await file.OpenReadAsync()) { fileBytes = new byte[stream.Size]; using (var reader = new DataReader(stream)) { await reader.LoadAsync((uint)stream.Size); reader.ReadBytes(fileBytes); } } HttpPost(fileBytes); } private async void HttpPost(byte[] fileBytes) { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php"); httpWebRequest.ContentType = "multipart/form-data"; httpWebRequest.Method = "POST"; using (var formBody = new HttpFormBody()) { formBody.AddString("userid", HttpUtility.UrlEncode("SOME_ID")); httpWebRequest.AddString(formBody.CreateFormField()); } using (var dataStream = await httpWebRequest.GetRequestStreamAsync()) { dataStream.Write(fileBytes, 0, fileBytes.Length); dataStream.Close(); } var asyncResult = httpWebRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), httpWebRequest); }
此修改使用 HttpRequest.AddString() 方法将“userid”字符串添加到请求正文中。它还确保文件字节附加到请求正文的末尾。通过使用这些函数,您可以有效地传输 HTTP POST 请求中的文件和附加字符串数据,满足 multipart/form-data 要求。
以上是如何在 Windows Phone 8 中使用 HTTP POST Multipart/Form-Data 上传文件和字符串数据?的详细内容。更多信息请关注PHP中文网其他相关文章!