#file #asp.net-core #iformfile
#файл #asp.net-ядро #iformfile
Вопрос:
в настоящее время я решаю проблему с загрузкой файлов — я использовал IFormFile, но теперь мне нужно добавить переменную (логическое значение) к каждому файлу — чтобы узнать, пометил ли пользователь этот файл как основной файл или дополнительный файл.
Я попытался создать свой собственный класс:
public class MyFormFile :FormFile
{
public MyFormFile(Stream baseStream, long baseStreamOffset, long length, string name, string fileName) : base(baseStream, baseStreamOffset, length, name, fileName)
{
MainFile = true;
}
public bool MainFile { get;set;}
}
Но когда я использую это, у меня нет файлов в модели. (Когда я использую List<IFormFile>
вместо List<MyFormFile>
in model, тогда это работает.
в настоящее время файлы, отправляемые из браузера, выглядят следующим образом:
Файл {Основной файл: true, имя: «Test_Result.pdf», последнее изменение: 1597833278041, последнее изменение даты: Ср. 19 авг. 2020 г. 12:34:38 GMT 0200 (летнее время Центральной Европы), webkitRelativePath: «», …}
Чего мне не хватает?
Спасибо.
Ответ №1:
Вы можете попробовать использовать модель, подобную этой:
public class FileInputModel
{
public FileInputModel(){
MainFile = true;
}
public IFormFile File { get; set; }
public bool MainFile { get; set; }
}
И вы можете использовать ajax для отправки данных со структурой FileInputModel
в контроллер, вот демонстрация:
TestController:
public IActionResult TestFiles(List<FileInputModel> files) {
return View();
}
Вид:
<form method="post">
<input id="Files" type="file" multiple/>
<input type="button" value="submit" onclick="Submit()"/>
</form>
<script>
function Submit() {
var pdata = new FormData();
var files = $("#Files").get(0).files;
for (var i = 0; i < files.length;i ) {
pdata.append('files[' i '].File', files[i]);
}
$.ajax({
url: "TestFiles",
type: "POST",
data: pdata,
processData: false,
contentType: false,
success: function (data) {
}
});
}
</script>