在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中文網其他相關文章!