Загрузка файла из представления в контроллер в .net Core

#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 единственный объект в своей базе данных.