Модель
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 берет только первый файл и оставляет остальные позади.
Переведено: Выберите файлы, 3 файла
Несмотря на то, что я указал загрузку нескольких файлов в поле ввода, certificates.IFormFiles
выдает мне размер 1.
Что я делаю неправильно?
Не имеет значения. certificates.IFormFiles
по-прежнему имеет размер 1.
можете показать html код формы?
у вашего тега формы есть этот атрибут enctype = "multipart/form-data"
?
Если вы использовали .Net core 2.0 или 2.1, попробуйте обновить свой SDK до 2.2.203, тогда он будет работать без проблем.
проблема не в вашем коде, это была ошибка в ядре .NET
Я приглашаю вас прочитать больше об этой ошибке здесь: https://github.com/aspnet/Mvc/issues/8527
В настоящее время я использую .Net core 2.2.102. Должен ли я все еще обновлять его?
После нескольких обсуждений с командой я обнаружил, что атрибут пользовательского свойства data-file-dragndrop
позволяет отправлять только 1 файл через AJAX. Вы по-прежнему могли загрузить более одного файла, но AJAX-запрос принял только один файл. В случае, когда вы загрузили более одного файла, AJAX-запрос взял первый файл и оставил остальные позади.
Мы все этого не знали, пока нам не объяснил тот, кто создал этот атрибут. Извините за неудобства!
Попробуйте обновить свой вопрос до resloved и объяснить проблему
Можете ли вы попробовать
multiple = "multiple"
вместоmultiple
при вводе файла