c# - (aspなし)にマルチパート/form -dataパーサーはありますか
-
28-09-2019 - |
質問
私はちょうどマルチパートパーサーを書こうとしていますが、物事は複雑になり、誰かがC#の準備が整ったパーサーを知っているかどうかを尋ねたいです!
明確にするために、私は自分の「小さな」HTTPサーバーを書いています。
事前に、Gohlool
解決
C#HTTPフォームパーサーをオープンソースしました ここ.
これは、MultiPartとNon-Multipartの両方に使用できるため、CodePlexにある他のものよりもわずかに柔軟です form-data
, また、フォーマットされた他のフォームパラメーターを提供します 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);
}
}
他のヒント
新しいMultiPartStreamProviderとそのサブクラス(IE 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);
}
Anthonyのおかげで最近解決した同様の問題がありました http://antscode.blogspot.com/ マルチパートパーサー用。
FlexからWCF RESTストリームの問題へのファイルのアップロード(REST WSでマルチパートフォーム投稿をデコードする方法)
所属していません StackOverflow