Есть ли в C # парсер multipart / form-data (НЕТ ASP) - PullRequest
8 голосов
/ 07 октября 2010

Я просто пытаюсь написать многочастный парсер, но все усложняется и хочу спросить, знает ли кто-нибудь о готовом парсере в C #!

Просто чтобы прояснить ситуацию, я пишу свой собственный "крошечный" http-сервер, и мне тоже нужно анализировать составные данные формы!

Спасибо заранее, Gohlool

Ответы [ 5 ]

27 голосов
/ 20 января 2012

Я с открытым исходным кодом для синтаксического анализа формы C # Http здесь .

Это немного более гибкий, чем другой упомянутый, который на CodePlex, так как вы можете использовать его как для Multipart ине-Multipart form-data, а также предоставляет другие параметры формы, отформатированные в объекте Dictionary.

Это можно использовать следующим образом:

не-multipart

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"]);
    }
}

multipart

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);
    }
}
8 голосов
/ 25 января 2013

У меня были некоторые проблемы с синтаксическим анализатором, которые основаны на синтаксическом анализе строк, особенно с большими файлами. Я обнаружил, что у него не хватает памяти и не удается проанализировать двоичные данные.

Чтобы справиться с этими проблемами, я открыл свою собственную попытку C # multipart / form-data parser здесь

См. Мой ответ здесь для получения дополнительной информации.

1 голос
/ 20 февраля 2017

Теперь у Core есть доступ к коллекции IFormCollection с помощью HttpContext.Request.Form.

Пример сохранения изображения:

        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);
        }
1 голос
/ 21 апреля 2014

Проверьте новый MultipartStreamProvider и его подклассы (например, MultipartFormDataStreamProvider).Вы также можете создать свою собственную реализацию, если ни одна из встроенных реализаций не подходит для вашего случая использования.

0 голосов
/ 27 марта 2011

У меня была похожая проблема, которую я недавно решил благодаря Энтони на http://antscode.blogspot.com/ для многочастного парсера.

Загрузка файла из Flex в WCF REST Stream (как декодировать)многочастная форма в REST WS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...