簡體   English   中英

將多個文件提交到接受 ICollection 的 ASP.NET 控制器<IFormFile>

[英]Submitting multiple files to ASP.NET controller accepting an ICollection<IFormFile>

在我的 ASP.NET Core 后端,我有一個控制器函數,如下所示:

[HttpPost]
[Route("documents/upload")]
public async Task<IActionResult> UploadFile(ICollection<IFormFile> files)
{
   ...
}

在我的前端,我這樣調用函數:

var postSettings = {
    method: 'POST',
    credentials: 'include',
    mode: 'cors'
}
uploadDocuments( files ) {
    var data = new FormData();
    data.append('files', files);   
    postSettings.body = data;

    return fetch(endPoint + '/documents/upload', postSettings);
}

如果“files”是單個文件 - 不是包含一個文件的數組,而是單個 File 對象 - UploadFile包含單個文件的ICollection<IFormFile>調用UploadFile

如果“files”是一個文件列表,或者是一個 FileList 或者一個 File 對象數組, UploadFile被調用時帶有一個空的ICollection<IFormFile>

如何以可以將文件解析為ICollection<IFormFile>的方式提交文件列表?

參考一次上傳多個文件 - 使用 Fetch

uploadDocuments(endPoint, files) {
    var postSettings = {
        method: 'POST',
        credentials: 'include',
        mode: 'cors'
    };
    var data = new FormData();
    if(files.length > 0) {
        for(var x = 0; x < files.length; x++) {
            // the name has to be 'files' so that .NET could properly bind it
            data.append('files', files.item(x));    
        }
    } 
    postSettings.body = data;

    return fetch(endPoint + '/documents/upload', postSettings);
}

參考使用模型綁定上傳小文件

使用模型綁定和IFormFile接口上傳文件時,操作方法可以接受單個IFormFile或代表多個文件的IEnumerable<IFormFile> (或List<IFormFile> )。 下面的示例循環遍歷一個或多個上傳的文件,將它們保存到本地文件系統,並返回上傳文件的總數和大小。

[HttpPost]
[Route("documents/upload")]
public async Task<IActionResult> Post(List<IFormFile> files)
{
    long size = files.Sum(f => f.Length);

    // full path to file in temp location
    var filePath = Path.GetTempFileName();

    foreach (var formFile in files)
    {
        if (formFile.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                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, filePath});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM