#asp.net-mvc #asp.net-core #.net-core #file-upload
#asp.net-mvc #asp.net-core #.net-core #загрузка файла
Вопрос:
Я пытаюсь создать проект .net core с загрузкой файлов.
В модели у меня есть имя класса «Movie» с 2 свойствами: изображение типа byte[] и изображение типа IFormFile.
В представлении я добавил форму с вводом:
<input asp-for="Picture" type="file" id="image_upload" />
И в моем контроллере у меня есть такая функция:
public IActionResult NewMovie(Movie movie){...
В передаваемом объекте movie свойства Image и Picture всегда равны НУЛЮ.
Я попытался изменить asp-for с изображения на изображение, чтобы изменить функцию на тип Task, добавить IFormFile к вызову функции, и ничего не помогло.
Я так и не смог получить данные файла. Мне нужно, чтобы он имел тип byte[], но я приму все, что мне поможет.
Заранее благодарю вас всех.
Ответ №1:
Вам не нужно хранить изображение в байтовом массиве, вашей модели нужен только IFormFile
такой:
Модель:
[Required(ErrorMessage = "The {0} field is required")]
[Display(Name = "Image")]
[DataType(DataType.Upload)]
public IFormFile Image { get; set; }
Контроллер:
if (model.Image == null)
return View(model);
string uploadsFolder = Path.Combine(webHostEnvironment.WebRootPath,"Your upload path");
string ImagePath = Guid.NewGuid().ToString() "_" model.Image.FileName;
string filePath = Path.Combine(uploadsFolder, ImagePath);
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
await model.Image.CopyToAsync(fs);
}
Добавьте это в свой form
тег: enctype="multipart/form-data"
.
Это необходимо для type="file"
отправки входных данных.
Вид:
<form enctype="multipart/form-data" Other attributes...>
<div class="custom-file">
<input asp-for="Model.Image" type="file" class="custom-file-input fileUpload" />
<label class="custom-file-label fileLabel">Choose file</label>
</div>
<input type="submit" value="Submit" />
</form>
И, наконец, вы сохраняете ImagePath
единственный объект в своей базе данных.