型号
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。
我在做什么错了?
答案 0 :(得分:1)
如果您使用的是.Net core 2.0或2.1,请尝试将SDK更新到2.2.203,然后它将正常工作。
问题不在您的代码中,这是.NET核心中的错误
我邀请您在此处阅读有关此错误的更多信息:https://github.com/aspnet/Mvc/issues/8527
答案 1 :(得分:0)
经过与团队的讨论,我发现自定义属性data-file-dragndrop
仅允许通过AJAX发送1个文件。您仍然可以上传多个文件,但AJAX请求仅接受一个文件。如果您上传了多个文件,则AJAX请求会获取第一个文件,而其余文件则留在后面。
直到创建此属性的人向我们解释了这一点,我们所有人才知道这一点。不便之处,敬请谅解!