WCF REST でマルチパート/フォームデータ POST ストリームからファイル バイトを抽出する方法
WCF REST にファイルを POST するときmultipart/form-data リクエストを通じてサービスを実行すると、結果のストリームには一連の境界、ヘッダー、およびファイル バイトが含まれます。このストリームからファイル バイトを抽出するのは難しい場合があります。
解決策: Microsoft パブリック API の利用
Microsoft は、このプロセスを簡素化する一連のパブリック API を提供しています。
実装:
このコード スニペットは、これらを使用してファイル バイトを抽出する方法を示しています。 API:
using System.Net.Http; using System.Net.Http.Formatting; using System.Threading.Tasks; 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); }
ファイル処理:
MyProcessMethod では、抽出されたファイルバイトに対して実行するアクション (ディスクへの書き込みなど) を指定できます。
以上がWCF REST でマルチパート/フォームデータ POST ストリームからファイル バイトを抽出する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。