wysyłka plików Fetch, program nie widzi listy plików

0

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 });
        }


    }
0

a może w kontrolerze odwołąc się tak:

var files = HttpContext.Request.Form.Files
if(files.Count > 0) { .. }

0

a takie coś jak dodasz
([FromForm/FromBody] List<IFormFile> files)

PS: tak patrząc na ten sposób zapisywania, to jak Ty masz zrealizowane pobierane?

1 użytkowników online, w tym zalogowanych: 0, gości: 1