Cześć,
Walczyłem samemu ze stackiem z Youtubem i nie mam zielonego pojęcia jak przesłać listę plików fetchem lub axiosem.
Korzystałem z tego linku:
https://stackoverflow.com/questions/43455994/submitting-multiple-files-to-asp-net-controller-accepting-an-icollectioniformfi
Jaki jest problem kod z linku wyżej przesyła poprawnie tylko jeden plik podstawiłem Icollection itd. nadal jest tylko jeden plik.
Chciałbym zastosować axiosa ale narzazie, ogólnie chciałbym to uruchomić.
<script>
var fd = new FormData();
$("#xlsx").on("change", function () {
debugger;
var files = $(this).get(0).files;
fd = new FormData();
for (var i = 0; i < files.length; i++) {
fd.append('file'+i, files.item(i));
}
})
function uploadDocuments() {
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);
//}
var data = new FormData();
data.append("file", fd)
postSettings.body = data;
return fetch('/api/FilesUpload', postSettings);
}
$("#gtwForm").submit(function (e) {
e.preventDefault();
e.stopImmediatePropagation();
debugger;
uploadDocuments()
</script>
[Route("api/[controller]")]
[ApiController]
public class FilesUpload : ControllerBase
{
[HttpPost]
public async Task<IActionResult> Post(List<IFormFile> 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 });
}
}