我有个问题。我将一些图像作为 base64 存储在 DB 中,现在我需要编辑包含此图像的对象。图像由用户以表格形式上传,我将其转换为base64
数据库并将其存储在数据库中。现在我的问题是如何将base64
字符串转换为 IFormFile 以显示它以编辑整个对象。
谢谢
我有个问题。我将一些图像作为 base64 存储在 DB 中,现在我需要编辑包含此图像的对象。图像由用户以表格形式上传,我将其转换为base64
数据库并将其存储在数据库中。现在我的问题是如何将base64
字符串转换为 IFormFile 以显示它以编辑整个对象。
谢谢
如果您尝试获取包含 Byte[]/base64 的对象/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[] 并将其保存在数据库中
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();
}