正在上传 asp.net 核心 3.1 Razor

Uploading asp.net core 3.1 Razor

我正在尝试在 ASP.NET 核心 3.1 中上传文件,但在我的 Post 中我没有收到文件。

count = 0 是我总是得到的。

@cshtml

 <input asp-for="app.FormFile" id="input-2" name="input2[]" type="file" class="file" multiple data-show-upload="true" data-show-caption="true">

@cshtml.cs

public async Task<IActionResult> OnPostAsync(List<IFormFile> files)
{
    long size = files.Sum(f => f.Length);

    foreach (var formFile in files)
    {
        if (formFile.Length > 0)
        {
            var filePath = Path.GetTempFileName();

            using (var stream = System.IO.File.Create(filePath))
            {
                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 });
}

在 ASP.NET 核心 2.0 中这工作正常!怎么了?

参数名称是 files,但您明确将输入名称设置为 input2[],因此它们不匹配。 ASP.NET Core 不会尝试解释您已经上传了一些文件,因此您可能希望它们继续使用此参数。如果它找不到将数据绑定到的东西(按名称),它就会丢弃它并继续前进。

名称应 files 以匹配参数名称:name="files".

even if I pass the name it still came with count = 0 <input asp-for="Laudos.FormFile" id="files" name="files" type="file" class="file" multiple data-show-upload="true" data-show-caption="true">

您可以尝试为您的 <form> 标签指定 multipart/form-data 的编码类型 (enctype),如下所示。

<form method="post" enctype="multipart/form-data">
    <input asp-for="Laudos.FormFile" id="input-2" name="files" type="file" class="file" multiple data-show-upload="true" data-show-caption="true">
    <input type="submit">
</form>

测试结果