ColinChang.BigFileForm
1.1.0
See the version list below for details.
dotnet add package ColinChang.BigFileForm --version 1.1.0
NuGet\Install-Package ColinChang.BigFileForm -Version 1.1.0
<PackageReference Include="ColinChang.BigFileForm" Version="1.1.0" />
paket add ColinChang.BigFileForm --version 1.1.0
#r "nuget: ColinChang.BigFileForm, 1.1.0"
// Install ColinChang.BigFileForm as a Cake Addin #addin nuget:?package=ColinChang.BigFileForm&version=1.1.0 // Install ColinChang.BigFileForm as a Cake Tool #tool nuget:?package=ColinChang.BigFileForm&version=1.1.0
What this is about?
an extension for Asp.Net Core HttpRequest that can process multiple form parameters including big files and texts in a POST/PUT method.
How to use it?
this extension is easy to be used by a few steps.
configuration
configures the file size limitation in appsettings.json
.
{
"BigFileFormOptions": {
"FileSizeLimit": 209715200,
"PermittedExtensions": [
".apk",
".ipa"
]
}
}
config the options in Startup.ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.Configure<BigFileFormOptions>(Configuration.GetSection(nameof(BigFileFormOptions)));
services.AddControllers();
}
try it
this only works in a POST or PUT method.
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly BigFileFormOptions _options;
private readonly string _baseDirectory;
private readonly ILogger _logger;
public TestController(IOptions<BigFileFormOptions> options, IHostEnvironment env,
ILogger<TestController> logger)
{
_options = options.Value;
_baseDirectory = env.ContentRootPath;
_logger = logger;
}
[HttpPost]
[DisableFormValueModelBinding]
[DisableRequestSizeLimit]
public async Task PostAsync()
{
var parameters = await Request.ExtractFormAsync(_options, (name, fileName) =>
System.IO.File.Create(Path.Combine(_baseDirectory, WebUtility.HtmlEncode(fileName))));
string releaseNotes;
releaseNotes = parameters.Texts[nameof(releaseNotes).ToLower()];
_logger.LogInformation($"{nameof(releaseNotes)}:{releaseNotes}");
string app;
if (parameters.Files.TryGetValue(nameof(app), out app))
_logger.LogInformation($"{nameof(app)}:{app}");
foreach (var (key, value) in parameters.Errors)
_logger.LogError($"error occured when process {key}: {value} ");
}
}
file size limitation
when we try to upload a big file, we have to know both the Kestrel server and default form have its limitation. We could adjust them by configuring KestrelServerOptions
and FormOptions
.
{
"KestrelServerOptions": {
"Limits": {
"KeepAliveTimeout": 300,
"RequestHeadersTimeout": 300,
"MaxRequestBodySize": 209715200,
"Http2": {
"MaxStreamsPerConnection": 104857600,
"MaxFrameSize": 16777215
}
}
},
"BigFileFormOptions": {
"FileSizeLimit": 209715200,
"PermittedExtensions": [
".apk",
".ipa"
]
}
}
public void ConfigureServices(IServiceCollection services)
{
services
// modify kestrel limitation
.Configure<KestrelServerOptions>(Configuration.GetSection(nameof(KestrelServerOptions)))
// modify default form limitation
.Configure<FormOptions>(options =>
{
var maxRequestBodySize =
int.Parse(Configuration["KestrelServerOptions:Limits:MaxRequestBodySize"]);
options.ValueLengthLimit = maxRequestBodySize;
options.MultipartBodyLengthLimit = maxRequestBodySize;
})
// big file form
.Configure<BigFileFormOptions>(Configuration.GetSection(nameof(BigFileFormOptions)));
services.AddControllers();
}
Sample
Sample project shows how to use this extension.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.1 is compatible. |
-
.NETCoreApp 3.1
- BouncyCastle.NetCore (>= 1.8.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
replace the middle to an extension of HttpRequest