即使指定了多个文件上载,IFormFile IEnumerable的大小也是1

问题描述 投票:2回答:2

模型

    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

我究竟做错了什么?

c# asp.net-mvc file-upload
2个回答
1
投票

如果您使用.Net core 2.0或2.1,请尝试将SDK更新为2.2.203然后它将正常工作。 问题不在您的代码中,这是.NET核心中的一个错误 我邀请你在这里阅读更多关于这个bug的信息:https://github.com/aspnet/Mvc/issues/8527


0
投票

经过与团队的一些讨论,我发现自定义属性属性data-file-dragndrop只允许通过AJAX发送1个文件。您仍然可以上传多个文件,但AJAX-Request只接受一个文件。在您上传多个文件的情况下,AJAX-Request接受了第一个文件并将其余文件留下。

在创建此属性的人向我们解释之前,我们都不知道这一点。对不起给您带来不便!

© www.soinside.com 2019 - 2024. All rights reserved.