Windows Phone 8 で HTTP POST マルチパート/フォーム データを使用してサーバーにファイルをアップロードする
SQLite データベースをアップロードしようとしていますmultipart/form-data MIME タイプと追加の文字列データを使用した HTTP POST リクエストを介して PHP Web サービスに送信します。 「ユーザーID=SOME_ID」ただし、現在のコードは期待どおりに動作しません。
"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 マルチパート/フォームデータを使用してファイルと文字列データをアップロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。