Добавить изображение в модель ядра dotnet - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть приложение dotnet core (+ razor + ef) с обычной моделью Product: -)

С продуктом должно быть связано изображение, загруженное из Products\Create.cshtml и Products\Edit.cshtml страницы, хранящиеся в таблице БД и показанные в Products\Details.cshtml.

Моя модель выглядит примерно так:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public decimal Price { get; set; }
    public byte[] Image { get; set; }
}

Первый вопрос: правильно ли использоватьbyte[] для изображения?

Второй вопрос: поскольку я полагаю, что не могу автоматически создать леса страницы CRUD для изображения, как я могу загрузить изображение со страницы бритвы Create.cshtml?

Большое спасибо

1 Ответ

1 голос
/ 30 апреля 2019

В вашем View вы можете

1) Либо идти с байтами встроенного изображения:

<img src="data:image/jpeg;base64,@Convert.ToBase64String(Model.Image)" />

2) Или - использовать отдельное действие контроллера, как GetImage ниже, котороевозвращает файл:

<img src="@Url.Action("GetImage", new { productId = Model.Id })" />

В этом случае вам потребуется дополнительное действие контроллера, например:

[HttpGet] 
public FileStreamResult GetImage(Guid productId) 
{ 
    using (var dbContext = new DbContext()) 
    { 
        var product = dbContext.Product.FirstOrDefault(x => x.Id == productId); 
        var ms = new MemoryStream(product.Image); 
        return new FileStreamResult(ms, "image/jpeg"); 
    } 
} 

ПРИМЕЧАНИЕ: если изображения не слишком велики, их сохранение в БД можетбудет хорошо.Если нет - я бы посоветовал сохранить их в файловой системе (или в облачном хранилище) с метаданными (такими как имя файла и т. Д.) В вашей базе данных.Но это точно другая история.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...