HttpMultipartParser 8.4.0

dotnet add package HttpMultipartParser --version 8.4.0                
NuGet\Install-Package HttpMultipartParser -Version 8.4.0                
此命令旨在在Visual Studio的包管理器控制台中使用,因为它使用NuGet模块版本的Install-Package
<PackageReference Include="HttpMultipartParser" Version="8.4.0" />                
对于支持PackageReference的项目,请将此XML节点复制到项目文件中以引用包。
paket add HttpMultipartParser --version 8.4.0                
#r "nuget: HttpMultipartParser, 8.4.0"                
#r指令可以在F# Interactive和Polyglot Notebooks中使用。将此内容复制到交互式工具或脚本的源代码中以引用包。
// Install HttpMultipartParser as a Cake Addin
#addin nuget:?package=HttpMultipartParser&version=8.4.0

// Install HttpMultipartParser as a Cake Tool
#tool nuget:?package=HttpMultipartParser&version=8.4.0                

Http多部分解析器

License Sourcelink Build status tests Coverage Status CodeFactor

发布说明 NuGet(稳定版) MyGet(预发布版)
GitHub release Nuget MyGet Pre Release

关于

Http多部分解析器准确地实现了其应实现的功能:解析multipart/form-data。此解析器非常适合解析来自流的大数据,因为它不会一次性读取整个流,而是产生一系列用于文件数据的流。

安装

将HttpMultipartParser包含到您的项目的最简单方法是将其nuget包添加到您的项目中

PM> Install-Package HttpMultipartParser

.NET框架支持

  • 此解析器是为.NET 4.8、.NET标准2.1、.NET 5.0和.NET 6.0构建和测试的。
  • 版本5.1.0是最后一个支持.NET 4.6.1、NET 4.7.2和.NET标准2.0的版本。
  • 版本 2.2.4 是最后一个支持旧 .NET 平台(例如 .NET 4.5 和 .NET 标准版 1.3)的版本。

用法

非流式处理(简单,不适合用于非常大的文件)

  1. 通过调用 MultipartFormDataParser.Parse 解析包含multipart/form-data 的流(或它的异步版本 MultipartFormDataParser.ParseAsync)。
  2. 通过解析器访问数据。

流式处理(处理大文件)

  1. 使用包含multipart/form-data 的流创建一个新的 StreamingMultipartFormDataParser
  2. 设置 ParameterHandler 和 FileHandler 委托
  3. 调用 parser.Run()(或它的异步版本 parser.RunAsync()
  4. 数据流进入时将调用委托。

示例

单个文件

// stream:
-----------------------------41952539122868
Content-Disposition: form-data; name="username"

example
-----------------------------41952539122868
Content-Disposition: form-data; name="email"

[email protected]
-----------------------------41952539122868
Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
Content-Type: image/jpeg

ExampleBinaryData012031203
-----------------------------41952539122868--
// ===== Simple Parsing ====
// You can parse synchronously:
var parser = MultipartFormDataParser.Parse(stream);

// Or you can parse asynchronously:
var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);

// From this point the data is parsed, we can retrieve the
// form data using the GetParameterValue method.
var username = parser.GetParameterValue("username");
var email = parser.GetParameterValue("email");

// Files are stored in a list:
var file = parser.Files.First();
string filename = file.FileName;
Stream data = file.Data;

// ==== Advanced Parsing ====
var parser = new StreamingMultipartFormDataParser(stream);
parser.ParameterHandler += parameter => DoSomethingWithParameter(parameter);
parser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>
{
    // Write the part of the file we've received to a file stream. (Or do something else)
    filestream.Write(buffer, 0, bytes);
}

// You can parse synchronously:
parser.Run();

// Or you can parse asynchronously:
await parser.RunAsync().ConfigureAwait(false);

多个参数

// stream:
-----------------------------41952539122868
Content-Disposition: form-data; name="checkbox"

likes_cake
-----------------------------41952539122868
Content-Disposition: form-data; name="checkbox"

likes_cookies
-----------------------------41952539122868--
// ===== Simple Parsing ====
// You can parse synchronously:
var parser = MultipartFormDataParser.Parse(stream);

// Or you can parse asynchronously:
var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);

// From this point the data is parsed, we can retrieve the
// form data from the GetParameterValues method
var checkboxResponses = parser.GetParameterValues("checkbox");
foreach(var parameter in checkboxResponses)
{
    Console.WriteLine("Parameter {0} is {1}", parameter.Name, parameter.Data)
}

多个文件

// stream:
-----------------------------41111539122868
Content-Disposition: form-data; name="files[]"; filename="photo1.jpg"
Content-Type: image/jpeg

MoreBinaryData
-----------------------------41111539122868
Content-Disposition: form-data; name="files[]"; filename="photo2.jpg"
Content-Type: image/jpeg

ImagineLotsOfBinaryData
-----------------------------41111539122868--
// ===== Simple Parsing ====
// You can parse synchronously:
var parser = MultipartFormDataParser.Parse(stream);

// Or you can parse asynchronously:
var parser = await MultipartFormDataParser.ParseAsync(stream).ConfigureAwait(false);

// Loop through all the files
foreach(var file in parser.Files)
{
    Stream data = file.Data;

    // Do stuff with the data.
}

// ==== Advanced Parsing ====
var parser = new StreamingMultipartFormDataParser(stream);
parser.ParameterHandler += parameter => DoSomethingWithParameter(parameter);
parser.FileHandler += (name, fileName, type, disposition, buffer, bytes, partNumber, additionalProperties) =>
{
    // Write the part of the file we've received to a file stream. (Or do something else)
    // Assume that filesreamsByName is a Dictionary<string, FileStream> of all the files
    // we are writing.
    filestreamsByName[name].Write(buffer, 0, bytes);
};
parser.StreamClosedHandler += () 
{
    // Do things when my input stream is closed
};

// You can parse synchronously:
parser.Run();

// Or you can parse asynchronously:
await parser.RunAsync().ConfigureAwait(false);

许可协议

此项目遵循 MIT 许可协议。

产品 兼容的和其他计算的面向框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 兼容。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.1 兼容。
.NET Framework net48 兼容。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(包含在包中)
了解更多关于 目标框架.NET Standard 的信息。

NuGet 包 (30)

显示依赖于 HttpMultipartParser 的前 5 个 NuGet 包

下载
StrongGrid

StrongGrid 是用于 SendGrid v3 API 的强类型 .NET 客户端。

ZoomNet

ZoomNet 是用于 Zoom API 的强类型 .NET 客户端。

Pangea.SDK

.NET SDK 用于在 pangea.cloud 上访问 Pangea API 服务。

IctBaden.Stonehenge3

X-Platform Web 应用程序框架

Butterfly.Web

简单 RESTlike 和订阅 API 服务器,使用 C# 实现。

GitHub 代码仓库 (9)

显示依赖于 HttpMultipartParser 的前 5 个最受欢迎的 GitHub 代码仓库

代码仓库 星星
sendgrid/sendgrid-csharp
The Official Twilio SendGrid C#, .NetStandard, .NetCore API Library
uholeschak/ediabaslib
.NET BMW 和 VAG Ediabas 解释器库
bassmaster187/TeslaLogger
TeslaLogger 是为您的 Tesla Model S/3/X/Y 自托管的日志记录器。实际上它支持 RaspberryPi 3B, 3B+, 4B, Docker 和 Synology NAS。
DataDog/dd-trace-dotnet
.NET Client Library for Datadog APM
ThomasBleijendaal/RapidCMS
RapidCMS 是一个 Blazor 框架,允许您从纯代码构建响应式且灵活的 CMS。它提供了一个基本的编辑器和控件集,并且是完全可定制的。
版本 下载 最后更新
8.4.0 212,320 4/8/2024
8.3.0 276,746 1/10/2024
8.2.0 390,018 6/22/2023
8.1.0 418,129 2/5/2023
8.0.0 215,625 1/8/2023
7.1.0 285,871 10/30/2022
7.0.0 255,806 7/7/2022
6.0.1 68,558 5/31/2022
5.1.0 515,092 3/5/2022
5.0.1 2,369,239 7/11/2021
5.0.0 1,613,759 1/3/2021
4.4.0 75,851 12/4/2020
4.3.1 561,134 5/1/2020
4.3.0 1,656 5/1/2020
4.2.0 64,378 3/30/2020
4.1.0 3,268 3/22/2020
4.0.0 95,678 3/11/2020
3.1.0 181,646 12/15/2019
3.0.0 125,756 11/25/2019
2.2.4 1,228,377 6/16/2017
2.2.3 57,151 1/11/2017
2.2.2 2,441 1/10/2017
2.2.1 329,308 12/7/2016
2.2.0 56,563 12/5/2016
2.1.7 26,679 10/30/2016
2.1.6 29,639 9/23/2016
2.1.5 2,451 9/23/2016
2.1.4 43,162 4/18/2016
2.1.3 6,341 2/13/2016
2.1.2 2,470 2/13/2016
2.1.1 7,841 1/3/2016
2.0.1 8,280 10/18/2015
2.0.0 7,820 8/23/2015
1.1.5 5,243 7/7/2015
1.1.4 20,206 2/13/2015
1.1.3 6,779 2/13/2015
1.1.2 2,537 2/6/2015
1.1.0 2,460 2/6/2015
1.0.3 2,448 2/6/2015
1.0.2 4,796 11/25/2014