ホームページ >バックエンド開発 >PHPチュートリアル >Windows Phone 8 で HTTP POST マルチパート/フォームデータを使用してファイルを正常にアップロードし、追加のパラメーターを渡す方法は?

Windows Phone 8 で HTTP POST マルチパート/フォームデータを使用してファイルを正常にアップロードし、追加のパラメーターを渡す方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-15 00:19:10784ブラウズ

How to Successfully Upload Files and Pass Additional Parameters with HTTP POST Multipart/Form-Data in Windows Phone 8?

Windows Phone 8 で HTTP POST Multipart/Form-Data を使用したファイルのアップロード

Windows Phone 8 アプリケーションを開発する場合、ファイルをサーバーにアップロードする必要があるのが一般的です。これは、multipart/form-data MIME タイプを指定した HTTP POST を使用して実現できます。ただし、Windows Phone 8 については特有の考慮事項があります。

コード サンプルとエラーの説明

提供されたコード サンプルは、ファイルをアップロードし、文字列パラメータ ("userid=SOME_ID") を次のように渡そうとします。 HTTP POST マルチパート/フォームデータ。ただし、ファイルが正常にアップロードされないという問題が発生します。

具体的な問題は GetRequestStreamCallback メソッドにあります。リクエスト ストリームは request.EndGetRequestStream(asynchronousResult) を使用して取得されますが、「userid=some_user_id」パラメータがリクエストに追加されていません。

追加パラメータの受け渡し

「」のような追加パラメータを渡すにはuserid" を使用するには、multipart/form-data リクエストの境界を作成する必要があります。この境界により、リクエストのさまざまな部分 (ファイルと追加パラメータ) が分離されます。

改良されたコード サンプル

これは、マルチパート/フォーム データ リクエストを適切に処理し、追加パラメータを渡す改良されたコード サンプルです。

private void HttpPost(byte[] fileBytes, string additionalParam)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myserver.com/upload.php");
    httpWebRequest.ContentType = "multipart/form-data; boundary=---------------------------" + DateTime.Now.Ticks.ToString("x");
    httpWebRequest.Method = "POST";
    var asyncResult = httpWebRequest.BeginGetRequestStream((ar) => { GetRequestStreamCallback(ar, fileBytes, additionalParam); }, httpWebRequest);  
}

private void GetRequestStreamCallback(IAsyncResult asynchronousResult, byte[] postData, string additionalParam)  
{
    HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;  
    Stream postStream = request.EndGetRequestStream(asynchronousResult); 

    // Create boundary start string
    string boundaryStart = "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1);

    // Write file content
    string fileBoundary = boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"file\"; filename=\"myfile.db\"" + Environment.NewLine + "Content-Type: application/octet-stream" + Environment.NewLine + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(fileBoundary), 0, fileBoundary.Length);   
    postStream.Write(postData, 0, postData.Length);  

    // Write additional parameter
    string paramBoundary = Environment.NewLine + boundaryStart + Environment.NewLine + "Content-Disposition: form-data; name=\"userid\"" + Environment.NewLine + Environment.NewLine + additionalParam + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(paramBoundary), 0, paramBoundary.Length);   

    // Write boundary end string
    string boundaryEnd = Environment.NewLine + "--" + request.ContentType.Substring(request.ContentType.IndexOf('=') + 1) + "--" + Environment.NewLine;
    postStream.Write(Encoding.UTF8.GetBytes(boundaryEnd), 0, boundaryEnd.Length);  

    postStream.Close();  
    var asyncResult = request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);  
}  

これらのガイドラインに従うことで、Windows Phone で HTTP POST multipart/form-data を使用してファイルをサーバーに正常にアップロードし、追加のパラメーターを渡すことができます。 8 つのアプリケーション。

以上がWindows Phone 8 で HTTP POST マルチパート/フォームデータを使用してファイルを正常にアップロードし、追加のパラメーターを渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。