マルチパートパーサーを作成しようとしていますが、状況が複雑になり、C#で準備ができているパーサーを誰かが知っているかどうかを尋ねたいと思います。
明確にするために、私は独自の「小さな」httpサーバーを作成しており、マルチパートフォームデータも解析する必要があります。
よろしくお願いします、Gohlool
マルチパートパーサーを作成しようとしていますが、状況が複雑になり、C#で準備ができているパーサーを誰かが知っているかどうかを尋ねたいと思います。
明確にするために、私は独自の「小さな」httpサーバーを作成しており、マルチパートフォームデータも解析する必要があります。
よろしくお願いします、Gohlool
ここでC#Httpフォームパーサーをオープンソース化しました。
form-data
これは、Multipartと非Multipartの両方に使用でき、オブジェクトでフォーマットされた他のフォームパラメータを提供するため、CodePlexにある他の1つよりもわずかに柔軟性がありDictionary
ます。
これは次のように使用できます。
非マルチパート
public void Login(Stream stream)
{
string username = null;
string password = null;
HttpContentParser parser = new HttpContentParser(stream);
if (parser.Success)
{
username = HttpUtility.UrlDecode(parser.Parameters["username"]);
password = HttpUtility.UrlDecode(parser.Parameters["password"]);
}
}
マルチパート
public void Upload(Stream stream)
{
HttpMultipartParser parser = new HttpMultipartParser(stream, "image");
if (parser.Success)
{
string user = HttpUtility.UrlDecode(parser.Parameters["user"]);
string title = HttpUtility.UrlDecode(parser.Parameters["title"]);
// Save the file somewhere
File.WriteAllBytes(FILE_PATH + title + FILE_EXT, parser.FileContents);
}
}
文字列の解析に基づくパーサーでいくつかの問題が発生しました。特に大きなファイルでは、メモリが不足し、バイナリデータの解析に失敗することがわかりました。
これらの問題に対処するために、私はここでC#multipart/form-dataパーサーでの私自身の試みをオープンソース化しました
詳細については、ここで私の答えを参照してください。
新しいMultipartStreamProviderとそのサブクラス(つまり、MultipartFormDataStreamProvider)を確認してください。組み込みの実装がユースケースに適していない場合は、独自の実装を作成することもできます。
Coreを使用すると、HttpContext.Request.Formを使用してIFormCollectionにアクセスできるようになります。
画像の保存例:
Microsoft.AspNetCore.Http.IFormCollection form;
form = ControllerContext.HttpContext.Request.Form;
using (var fileStream = System.IO.File.Create(strFile))
{
form.Files[0].OpenReadStream().Seek(0, System.IO.SeekOrigin.Begin);
form.Files[0].OpenReadStream().CopyTo(fileStream);
}
マルチパートパーサーについてhttp://antscode.blogspot.com/にあるAnthonyのおかげで、最近解決した同様の問題がありました。
FlexからWCFRESTストリームへのファイルのアップロードの問題(REST WSでマルチパートフォームの投稿をデコードする方法)