Are there any multipart/form-data parser in C# - (NO ASP)

后端 未结 5 467
礼貌的吻别
礼貌的吻别 2020-12-05 06:07

I am just trying to write a multipart parser but things getting complicated and want to ask if anyone knows of a ready parser in C#!

Just to make clear, I am writin

相关标签:
5条回答
  • 2020-12-05 06:24

    With Core now you have access to a IFormCollection by using HttpContext.Request.Form.

    Example saving an image:

            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);
            }
    
    0 讨论(0)
  • 2020-12-05 06:31

    I've had some issues with parser that are based on string parsing particularly with large files I found it would run out of memory and fail to parse binary data.

    To cope with these issues I've open sourced my own attempt at a C# multipart/form-data parser here

    See my answer here for more information.

    0 讨论(0)
  • 2020-12-05 06:32

    I had a similar problem that i recently solved thanks to Anthony over at http://antscode.blogspot.com/ for the multipart parser.

    Uploading file from Flex to WCF REST Stream issues (how to decode multipart form post in REST WS)

    0 讨论(0)
  • 2020-12-05 06:40

    I open-sourced a C# Http form parser here.

    This is slightly more flexible than the other one mentioned which is on CodePlex, since you can use it for both Multipart and non-Multipart form-data, and also it gives you other form parameters formatted in a Dictionary object.

    This can be used as follows:

    non-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);
        }
    }
    
    0 讨论(0)
  • 2020-12-05 06:41

    Check out the new MultipartStreamProvider and its subclasses (i.e. MultipartFormDataStreamProvider). You can create your own implementation too if none of the built in implementations are suitable for you use case.

    0 讨论(0)
提交回复
热议问题