Multiple file uploads was missing
63ec5126d00a1aec91952353a2cbc646ddd541cb
5 files changed
src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cssrc/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/Default.jssrc/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.htmlsrc/Mvc.ModelBinding.MultiParameter/GenericValueProvider.cssrc/Mvc.ModelBinding.MultiParameter/Mvc.ModelBinding.MultiParameter.csproj
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
index cdf1258..e7dc233 100644
--- a/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/Controllers/ComplexController.cs
@@ -499,18 +499,18 @@ public class ApiController : ControllerBase
[HttpPost("~/api/Upload")]
[RequestSizeLimit(2_500_000_000)]
[RequestFormLimits(MultipartBodyLengthLimit = 2_500_000_000)]
- public async Task<IActionResult> Upload(IFormFile file, string Form1)
+ public async Task<IActionResult> Upload(List<IFormFile> files, string Form1)
{
- if (file?.Length == 0)
+ if (files?.Count == 0)
return BadRequest("No file uploaded or file is empty.");
try
{
- var Length = file.Length;
+ var Length = files.Count;
var filePath = Path.GetTempFileName();
using (var stream = new FileStream(filePath, FileMode.Create))
- await file.CopyToAsync(stream);
+ await files[0].CopyToAsync(stream);
return Ok(new
{
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/Default.js b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/Default.js
index bdc77dd..2c5f272 100644
--- a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/Default.js
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/Default.js
@@ -289,7 +289,8 @@ function StartUpload(e)
var formData = new FormData();
- formData.append("file", file, file.name);
+ formData.append("files", file, file.name);
+ formData.append("files", file, file.name);
formData.append("Form1", "another var");
netproxy("/api/Upload", formData, function ()
diff --git a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
index e68fa8b..26d32ae 100644
--- a/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
+++ b/src/Mvc.ModelBinding.MultiParameter.Testing/wwwroot/index.html
@@ -33,5 +33,11 @@
<div><a href="speedtest.html" class="ui-btn">SpeedTest</a></div>
+ <form action="/api/upload" method="post" enctype="multipart/form-data">
+ <label for="files">Select multiple files:</label>
+ <input type="file" name="files" id="files" multiple>
+ <button type="submit">Upload</button>
+ </form>
+
</body>
</html>
diff --git a/src/Mvc.ModelBinding.MultiParameter/GenericValueProvider.cs b/src/Mvc.ModelBinding.MultiParameter/GenericValueProvider.cs
index 178c3ed..180378e 100644
--- a/src/Mvc.ModelBinding.MultiParameter/GenericValueProvider.cs
+++ b/src/Mvc.ModelBinding.MultiParameter/GenericValueProvider.cs
@@ -13,15 +13,15 @@ public interface IGenericValueProvider : IValueProvider
}
public class GenericValueProvider(
- BindingSource bindingSource,
- JsonDocument? jsonDocument,
- IFormCollection? formCollection,
+ BindingSource bindingSource,
+ JsonDocument? jsonDocument,
+ IFormCollection? formCollection,
JsonSerializerOptions? jsonSerializerOptions) : IGenericValueProvider
{
- public ValueProviderResult GetValue(string key) =>
+ public ValueProviderResult GetValue(string key) =>
ValueProviderResult.None;
- public IValueProvider? Filter(BindingSource bindingSourceFilter) =>
+ public IValueProvider? Filter(BindingSource bindingSourceFilter) =>
bindingSource.CanAcceptDataFrom(bindingSourceFilter) ? this : null;
public bool ContainsPrefix(string prefix)
@@ -86,9 +86,12 @@ public class GenericValueProvider(
return model;
}
- if (formCollection.Files != null && t == typeof(IFormFile))
+ if (formCollection.Files != null)
{
- return formCollection.Files.FirstOrDefault(x => x.Name == key);
+ if (t == typeof(IFormFile))
+ return formCollection.Files.FirstOrDefault(x => x.Name == key);
+ else
+ return formCollection.Files;
}
}
return null;
diff --git a/src/Mvc.ModelBinding.MultiParameter/Mvc.ModelBinding.MultiParameter.csproj b/src/Mvc.ModelBinding.MultiParameter/Mvc.ModelBinding.MultiParameter.csproj
index 6f1d544..5045a00 100644
--- a/src/Mvc.ModelBinding.MultiParameter/Mvc.ModelBinding.MultiParameter.csproj
+++ b/src/Mvc.ModelBinding.MultiParameter/Mvc.ModelBinding.MultiParameter.csproj
@@ -10,11 +10,11 @@
<RepositoryUrl>https://github.com/alphons/Mvc.ModelBinding.MultiParameter.git</RepositoryUrl>
<Description>New ValueProviders and ModelBinder for multi parameters model binding out of the box on AspNetCore</Description>
<PackageDescription>New ValueProviders and ModelBinder for multi parameters model binding out of the box on AspNetCore</PackageDescription>
- <Version>8.2.1</Version>
+ <Version>8.2.2</Version>
<PackageId>Mvc.ModelBinding.MultiParameter</PackageId>
<Authors>alphons</Authors>
<AssemblyVersion>8.0.0.0</AssemblyVersion>
- <FileVersion>8.2.1.0</FileVersion>
+ <FileVersion>8.2.2.0</FileVersion>
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
<PackageTags>Microsoft;AspNetCore;Mvc;AspNetCoreMvc;json</PackageTags>
<PackageIcon>icon.png</PackageIcon>