10

我只是想写一个多部分解析器,但事情变得复杂了,想问一下是否有人知道 C# 中有一个现成的解析器!

为了清楚起见,我正在编写自己的“小型”http服务器,并且也需要解析多部分表单数据!

在此先感谢,

4

5 回答 5

27

我在这里开源了一个 C# Http 表单解析器。

这比 CodePlex 上提到的另一个稍微灵活一些,因为您可以将它用于 Multipart 和 non-Multipart 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);
    }
}
于 2012-01-20T16:11:41.733 回答
10

我遇到了一些基于字符串解析的解析器问题,特别是对于大文件,我发现它会耗尽内存并且无法解析二进制数据。

为了解决这些问题,我在这里开源了我自己对 C# multipart/form-data 解析器的尝试

有关更多信息,请参阅我的答案。

于 2013-01-25T00:08:23.460 回答
1

查看新的 MultipartStreamProvider 及其子类(即 MultipartFormDataStreamProvider)。如果没有任何内置实现适合您的用例,您也可以创建自己的实现。

于 2014-04-20T20:24:58.360 回答
1

现在有了 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);
        }
于 2017-02-19T23:51:21.640 回答
0

我最近遇到了一个类似的问题,感谢 Anthony 在http://antscode.blogspot.com/上的多部分解析器。

将文件从 Flex 上传到 WCF REST Stream 问题(如何在 REST WS 中解码多部分表单帖子)

于 2011-03-27T19:41:40.847 回答