In my ASP.NET Core backend, I have a controller function that looks like this:
[HttpPost]
[Route(\"documents/upload\")]
public async Task
Reference Uploading multiple files at once - with Fetch
uploadDocuments(endPoint, files) {
var postSettings = {
method: 'POST',
credentials: 'include',
mode: 'cors'
};
var data = new FormData();
if(files.length > 1) {
for(var x = 0; x < files.length; x++) {
data.append('file' + x, files.item(x));
}
} else {
data.append('files', files);
}
postSettings.body = data;
return fetch(endPoint + '/documents/upload', postSettings);
}
Reference Uploading small files with model binding
When uploading files using model binding and the
IFormFileinterface, the action method can accept either a singleIFormFileor anIEnumerable(orList) representing several files. The following example loops through one or more uploaded files, saves them to the local file system, and returns the total number and size of files uploaded.
[HttpPost]
[Route("documents/upload")]
public async Task Post(List files)
{
long size = files.Sum(f => f.Length);
// full path to file in temp location
var filePath = Path.GetTempFileName();
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
// process uploaded files
// Don't rely on or trust the FileName property without validation.
return Ok(new { count = files.Count, size, filePath});
}