ホームページ >バックエンド開発 >C++ >.NET でマルチパート/フォームデータ POST リクエストからファイル バイトを抽出するにはどうすればよいですか?

.NET でマルチパート/フォームデータ POST リクエストからファイル バイトを抽出するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-04 14:24:38853ブラウズ

How Can I Extract File Bytes from a Multipart/Form-Data POST Request in .NET?

Multipart/Form-Data POST からのファイル バイトの抽出

multipart/form-data POST では、ファイル データはリクエストストリーム。これにより、サーバー側でファイルのバイトを抽出する際に課題が生じます。解決策の 1 つは、Microsoft のパブリック API を利用してマルチパート コンテンツを解析することです。

実装

Microsoft の API を使用してマルチパート データを解析するには、System.Net.Http が必要です。 .dll および System.Net.Http.Formatting.dll アセンブリ。 .NET 4.5 の場合、これらのアセンブリが含まれています。 .NET 4 の場合は、NuGet 経由でダウンロードします。

参照されたアセンブリを使用して、解析ロジックを実装できます。

public static async Task ParseFiles(
    Stream data, string contentType, Action<string, Stream> fileProcessor)
{
    var streamContent = new StreamContent(data);
    streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse(contentType);

    var provider = await streamContent.ReadAsMultipartAsync();

    foreach (var httpContent in provider.Contents)
    {
        var fileName = httpContent.Headers.ContentDisposition.FileName;
        if (string.IsNullOrWhiteSpace(fileName))
        {
            continue;
        }

        using (Stream fileContents = await httpContent.ReadAsStreamAsync())
        {
            fileProcessor(fileName, fileContents);
        }
    }
}

このコードを使用するには、次のような WCF REST メソッドを実装できます。以下:

[OperationContract]
[WebInvoke(Method = WebRequestMethods.Http.Post, UriTemplate = "/Upload")]
void Upload(Stream data)
{
    MultipartParser.ParseFiles(
           data, 
           WebOperationContext.Current.IncomingRequest.ContentType, 
           MyProcessMethod);
}

Microsoft の API を利用すると、ファイルのバイトを効果的に抽出できます。 multipart/form-data POST リクエストにより、ファイルをディスクに書き込むことができます。

以上が.NET でマルチパート/フォームデータ POST リクエストからファイル バイトを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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