我有问题。我将一些图像存储在DB中作为base64,现在我需要编辑包含此图像的此对象。用户在表单中上传图像,然后将其转换为base64并将其存储在DB中。现在我的问题很热,将base64图像转换回IFormFile以显示它以编辑整个对象。
日Thnx
答案 0 :(得分:-1)
如果您正在尝试获取包含Byte [] / base64的object / viewModel, 我在几个小时内搜索了一个解决方案,但后来又为我的viewmodel添加了额外的参数
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 []并将其保存在DataBase中 我试图使用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();
}