我正在創(chuàng)建一個(gè)ASP.NETCore 6文件上傳應(yīng)用程序。這是我的代碼:
FORM
<form asp-controller="Home" asp-action="UploadFiles" method="post" enctype="multipart/form-data" id="uploadForm">
<input type="file" class="form-control-file" multiple name="files">
@foreach (var folder in @Model.Folders)
{
<input id="filePathUrl" type="radio" asp-for="Folders" value="@folder" />
@folder
}
<button type="submit" class="btn custom-button">Upload Files</button>
jQuery
function processFiles(confirmOverwrite = false){
const filePath = $("#filePathUrl").val();
const fileList = $(".form-control-file")[0].files;
const files = Array.from(fileList);
let formData = new FormData();
files.forEach(file => formData.append("files[]", file));
const URL = '@Url.Action("UploadFiles", "Home")';
$.ajax({
url: URL + '?folders=' + filePath + '&confirmOverwrite=' + confirmOverwrite,
type: 'post',
data: formData,
// dataType: 'json',
contentType: false,
processData: false,
...
MVC Action
[HttpPost]
public async Task<JsonResult> UploadFiles(IEnumerable<IFormFile> files, string folders, bool confirmOverwrite = false)
{
List<string> existingFiles = new();
var filesToBeSaved = new List<(IFormFile file, string filePath)>();
foreach (var file in files)
{
string trimmedFileName = file.FileName.Replace(" ", "");
var filePath = Path.Combine(folders, trimmedFileName);
if (System.IO.File.Exists(filePath) && !confirmOverwrite)
{
existingFiles.Add(file.FileName + "(" + trimmedFileName + ")");
}
else
{
filesToBeSaved.Add((file, filePath));
}
}
...
我刪除了很多代碼,以保持相關(guān)和簡(jiǎn)單。
為什么提交表單時(shí)文件參數(shù)顯示為空??
模型綁定按名稱綁定參數(shù)。您的后端
IEnumerable<IFormFile> files
名稱為files
。因此,您需要更改代碼,如下所示:
此外,我知道你可能想通過數(shù)組索引發(fā)布它。僅對(duì)于復(fù)雜的列表模型類型,您可能需要如下帖子:
model[index].PropertyName
。參考這里。