Windows Phone および Windows 8 での HTTP POST マルチパート/フォーム データを使用したファイルのサーバーへのアップロード
Web サーバーへのファイルのアップロードは、モバイル開発における一般的なタスク。このガイドでは、Windows Phone 8 とネイティブ API を使用する Windows 8 の両方を使用して、HTTP POST multipart/form-data でこれを実現する方法を説明します。
Windows Phone 8 の実装
multipart/form-data を指定した HTTP POST を使用して PHP Web サービスにファイルをアップロードしようとしましたが、問題が発生しました。コードは期待どおりに「userid」パラメータを渡しません。これを解決するには、コードを変更してフォーム データ内に「userid」パラメータを含めます。
その方法の例を次に示します。
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); }
このコードでは、「userid」 " パラメータはファイル データとともに渡されます。 PHP Web サービスがこの形式のパラメーターを想定していることを確認してください。
Windows 8 の実装
Windows 8 の場合、HttpClient と MultipartFormDataContent を使用してファイルをアップロードしようとしました。 、しかしそれも失敗しました。問題は、ファイル データのコンテンツ タイプが正しくないことにある可能性があります。コードを変更して、正しいコンテンツ タイプを指定します。
form.Add(new ByteArrayContent(file_bytes, 0, file_bytes.Length), "file", "hello1.jpg", "application/octet-stream");
このコードは、ファイル データのコンテンツ タイプを「application/octet-stream」に正しく設定します。
追加メモ
以上がWindows Phone 8 および Windows 8 で HTTP POST マルチパート/フォームデータを使用してサーバーにファイルをアップロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。