【问题标题】:IFormFile IEnumerable is of size 1 even though multiple file upload is specified即使指定了多个文件上传,IFormFile IEnumerable 的大小也为 1
【发布时间】:2019-04-10 17:18:52
【问题描述】:

型号

    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 的大小。

我做错了什么?

【问题讨论】:

  • 你可以在文件输入中尝试multiple="multiple"而不是multiple
  • 没有区别。 certificates.IFormFiles 的大小仍然为 1。
  • 可以显示html表单代码吗?
  • 你的表单标签有enctype="multipart/form-data"这个属性吗?

标签: c# asp.net-mvc file-upload


【解决方案1】:

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

【讨论】:

  • 我目前使用的是 .Net core 2.2.102。我还应该更新它吗?
【解决方案2】:

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

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

【讨论】:

  • 尝试更新您的问题以重新解决问题并解释问题
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2016-10-24
相关资源
最近更新 更多