Когда вы добавляете изображения динамически, вам нужно будет передавать их из действия вашего контроллера.
Как этого добиться?
Мне нравится решать эту проблему, у меня есть путь вmy appsettings.json
, который будет указывать на местоположение в моей папке wwwroot.
"FilePaths": {
"Pictures": "wwwroot/content/img/",
},
Окей, теперь вы можете иметь такой контроллер
public class MyController : Controller
{
public string _imgPath;
public MyController(IConfiguration config)
{
_imgPath = config["FilePaths:Pictures"];
}
//save file
public async Task<IActionResult> SaveMeal(IFormFile image)
{
var fileName = generateName();
var savePath = Path.Combine(_imgPath, fileName);
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
await image.CopyToAsync(fileStream);
}
//make sure to save the file name in your Meal model.
}
// this is what will stream the image from your controller.
//imgName is your file name.
[HttpGet("{imgName}")]
public IActionResult GetImg(string imgName)
{
var readPath = Path.Combine(_imgPath, imgName);
var fileStream = FileStream(readPath, FileMode.Open, FileAccess.Read);
return new FileStreamResult(fileStream , $"image/{imgName.Split('.')[1]}");
}
}
Так что теперь, если у вас есть <img>
элемент, который вы хотите установить src
так, чтобы он указывал на действие GetImg
, так что, по сути, /controller/action/{imgName}
Примечание: вам может понадобиться использовать IHostingEnvironment
, чтобы указать наваш каталог исходного кода.
Добавление шагов
Это логические шаги:
- Убедитесь, что у вас есть переменная, которая указывает на гдеВы хотите сохранить свои файлы
- Загрузить свой файл (изображение) на сервер
- Сохранить файл (изображение), где ваша переменная указывает на
- Убедитесь, что вы записали имяэтого файла и сохранить его где-нибудь, где вы можете получить его, предпочтительно в базе данных противзапись, к которой относится изображение.
На данный момент мы знаем, где мы сохраняем файлы, у нас есть файл, который мы загрузили, и у нас есть имя файла, который мы хотим получить.Теперь давайте передадим этот файл из контроллера.
- Создайте элемент img html и заставьте src указывать на действие контроллера
- Убедитесь, что маршрут, связанный с атрибутом srcсодержит имя файла.
- Получить имя файла из маршрута в качестве значения в действии
- использовать это значение вместе с нашей исходной переменной, которая указывает, где находится файлсохранено, чтобы мы могли читать из него.
- как только мы читаем из потока (по сути, это просто пакеты байтов), наше изображение должно быть отображено.