Образ ASP.NET Core MVC base64 для IFormFile
У меня проблема. Я сохранил некоторые изображения в БД как base64, и теперь мне нужно отредактировать этот объект, который содержит это изображение. Изображение загружается пользователем в форме, и я преобразовал его в base64 и сохранил его в БД. Теперь моя проблема заключается в том, чтобы преобразовать обратно изображение base64 в IFormFile, чтобы отобразить его для редактирования всего объекта.
Thnx
1 ответ
Если вы пытаетесь получить объект /viewModel, который содержит Byte[]/base64, я искал решение в течение нескольких часов, но затем я добавил дополнительный параметр в мою модель представления
public class ProductAddVM
{
public int Id { get; set; }
public Categories Category { get; set; }
public decimal Vat { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public IFormFile Image { get; set; }
public Byte[] ByteImage { get; set; }
public string Description { get; set; }
public bool? Available { get; set; }
}
Параметр Image предназначен для хранения нового изображения, которое может загружаться в формате EDIT, как вы упомянули. Пока параметр ByteImage - получить старое изображение из базы данных.
Там, где вы закончили редактирование, вы можете преобразовать IFormFile в byte[] и сохранить его в базе данных. Я пытался использовать Mapper, но все пошло не так, этот код работает на 100%, но я заставлю его выглядеть лучше.
internal ProductAddVM GetProduct(int id)
{
var model = new Product();
model = Product.FirstOrDefault(p => p.Id == id);
var viewModel = new ProductAddVM();
viewModel.Id = model.Id;
viewModel.Name = model.Name;
viewModel.Available = model.Available;
viewModel.Description = model.Description;
viewModel.Price = model.Price;
viewModel.Category = (Categories)model.Category;
viewModel.Vat = model.Vat;
viewModel.ByteImage = model.Image;
return viewModel;
}
internal void EditProduct(int id, ProductAddVM viewModel,int userId)
{
var tempProduct = Product.FirstOrDefault(p => p.Id == id);
tempProduct.Name = viewModel.Name;
tempProduct.Available = viewModel.Available;
tempProduct.Description = viewModel.Description;
tempProduct.Price = viewModel.Price;
tempProduct.Category =(int)viewModel.Category;
tempProduct.Vat = CalculateVat(viewModel.Price,(int)viewModel.Category);
if (viewModel.Image != null)
{
using (var memoryStream = new MemoryStream())
{
viewModel.Image.CopyToAsync(memoryStream);
tempProduct.Image = memoryStream.ToArray();
}
}
tempProduct.UserId = userId;
tempProduct.User = User.FirstOrDefault(u => u.Id == userId);
SaveChanges();
}