c# - 上传多张图片并转换为base64,然后保存到数据库
问题描述
我得到了一个允许上传多张图片的表格。然后我收集这些图像,将它们上传到应用程序中的一个文件,并将它们转换为 base64 字符串,然后再将这些字符串保存到数据库中。
以下是我已经得到的:
看法 :
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-4 ">
<div class="form-group">
@Html.LabelFor(Model => Model.VueSiegeArriere, new { @class = "control-label", })
@Html.TextBoxFor(Model => Model.VueSiegeArriere, new { @class = "form-control", type = "file", accept = "image/x-png,image/jpeg", id = "VueSiegeArriere" })
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-6 col-lg-4 ">
<div class="form-group">
@Html.LabelFor(Model => Model.VueSiegeAvant, new { @class = "control-label", })
@Html.TextBoxFor(Model => Model.VueSiegeAvant, new { @class = "form-control", type = "file", accept = "image/x-png,image/jpeg", id = "VueSiegeAvant" })
</div>
</div>
控制器:
[HttpPost]
public ActionResult AddVoiture(VoitureVM v, HttpPostedFileBase VueFace, HttpPostedFileBase VueArriere, HttpPostedFileBase VueGauche, HttpPostedFileBase VueDroite, HttpPostedFileBase VueSiegeArriere, HttpPostedFileBase VueSiegeAvant, HttpPostedFileBase MalleArriere, HttpPostedFileBase TableauBord)
{
Voiture Car = new Voiture();
v.VueFace = UploadandConvertImage(VueFace);
v.VueGauche = UploadandConvertImage(VueGauche);
v.VueSiegeArriere = UploadandConvertImage(VueSiegeArriere);
v.VueSiegeAvant = UploadandConvertImage(VueSiegeAvant);
v.VueDroite = UploadandConvertImage(VueDroite);
v.TableauBord = UploadandConvertImage(TableauBord);
v.VueArriere = UploadandConvertImage(VueArriere);
v.MalleArriere = UploadandConvertImage(MalleArriere);
return RedirectToAction("Liste");
//return View(v);
}
我在控制器中调用的 UploadandConvertImage 方法:
string base64String;
private string UploadandConvertImage(HttpPostedFileBase file)
{
if (file != null)
{
string pic = System.IO.Path.GetFileName(file.FileName);
string path = System.IO.Path.Combine(Server.MapPath("~/Pictures/Voitures"), pic);
// file is uploaded
file.SaveAs(path);
//wish to convert the uploaded images to base64 and store them in database
using (System.Drawing.Image image = System.Drawing.Image.FromFile(path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
base64String = Convert.ToBase64String(imageBytes);
//return base64String;
}
}
}
return base64String;
}
保存到数据库:
//Let's now insert details into the table ImagesVoitures
ImagesVoiture carImages = new ImagesVoiture();
carImages.VueFace = voiture.VueFace;
carImages.VueGauche = voiture.VueGauche;
carImages.VueDroite = voiture.VueDroite;
carImages.VueSiegeArriere = voiture.VueSiegeArriere;
carImages.VueSiegeAvant = voiture.VueSiegeAvant;
carImages.TableauBord = voiture.TableauBord;
carImages.MalleArriere = voiture.MalleArriere;
carImages.VueArriere = voiture.VueArriere;
bdd.ImagesVoiture.Add(carImages);
bdd.SaveChanges();
我期望得到的是可以保存到数据库中各个字段的 base64 字符串。
我实际上得到的是一个 SQLException,它说:
System.Data.Entity.Validation.DbEntityValidationException : 'Échec de la validation d'une ou de plusieurs entités。倒加 d'信息,咨询'EntityValidationErrors'。
解决方案
您的错误不是来自您发布的代码。在这段代码中,我也没有看到您正在保存到数据库中。
看起来您的Voiture
模型已对其进行验证。您分配给car
实例的字符串Voiture
可能未通过验证。
我可能犯了一个错误,但看起来您正在发布图像,将它们转换为 base64 字符串并将它们返回给客户端或视图。
我错过了什么?
推荐阅读
- swift - Swift - 改变枚举关联类型属性的值
- swift - 如何使用 System KeyChain 和 AccessGroup?
- node.js - 如何使用'timestamp'类型而不是来自reactjs的'map'类型在firebase中存储日期
- javascript - 尝试在表单数据中传递关联数组的数组
- excel - EXCEL - 如果列中的单元格包含列表中的任何字符串(特定于每一行的列表),则取平均值
- python - 使用 pipreqs 和 freeze 创建 requirements.txt
- microsoft-graph-api - Graph API - 带有图像的文件搜索文件夹
- excel - 需要excel的代码来根据另一列中的值变化来填充列中的时间,但我需要在2个不同的列中
- go - 如何在 golang 中导入生成的 SDK?
- regex - 正则表达式从字符串中提取一些特定的数字,尝试了几种方法