IFormFile IEnumerable имеет размер 1, несмотря на то, что указана загрузка нескольких файлов - PullRequest
2 голосов
/ 09 апреля 2019

Модель

    public List<ZertifikatFiles> Files { get; set; }

    [NotMapped]
    public IEnumerable<IFormFile> Certificates { get; set; }

Вид

<form asp-action="AddCertificate" method="post" enctype="multipart/form-data"  data-file-dragndrop>
<div class="row">
    <div class="col-md-3"></div>
    <div class="form-group col-md-9">
        <input type="file" asp-for="IFormFiles" multiple />
        <span asp-validation-for="IFormFiles" class="text-danger"></span>
    </div>
</div>  </form>

Контроллер

[HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> AddCertificate(Certificates certificates )
    {
        if (ModelState.IsValid)
        {
            if (certificates.IFormFiles != null && !certificates.IFormFiles.IsEmpty())
            {
                certificates.Files = new List<CertificateFiles>();
                foreach (IFormFile formFile in certificates.IFormFiles)
                {
                    byte[] bytes = new byte[formFile.Length];
                    using (var reader = formFile.OpenReadStream())
                    {
                        await reader.ReadAsync(bytes, 0, (int)formFile.Length);
                    }......

Всякий раз, когда я пытаюсь загрузить более одного файла, IEnumerable берет только первый файли оставляет все остальное.

Choose Files, 3 Files chosen

Переведено: Выберите файлы, 3 файла

Несмотря на то, что я указал загрузку нескольких файлов вполе ввода, certificates.IFormFiles дает мне размер 1.

enter image description here

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Если вы использовали .Net core 2.0 или 2.1, попробуйте обновить SDK до 2.2.203, тогда он будет работать без проблем.
проблема не в вашем коде, это ошибка в .NET core
Я предлагаю вам прочитать больше об этой ошибке здесь: https://github.com/aspnet/Mvc/issues/8527

0 голосов
/ 10 апреля 2019

После нескольких обсуждений с командой я обнаружил, что атрибут пользовательского свойства data-file-dragndrop позволяет отправлять только 1 файл через AJAX.Вы все еще могли загрузить более одного файла, но AJAX-запрос принял только один файл.В случае, когда вы загрузили более одного файла, AJAX-запрос взял первый файл и оставил остальные.

Мы все не знали этого, пока тот, кто создал этот атрибут, не объяснил нам это.Извиняюсь за неудобства!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...