你好,我正在尝试从本地文件夹向我的数据库添加图像,并且工作成功,但是保存了路径,并且在索引页面上not displaying
没有图像,但是在数据库上created value path
/>
我有这个错误:
获取http://localhost:57079/'〜/ Content / img / Asp.net.svg.png'
这是创建方法:
public ActionResult Create( Article article,HttpPostedFileBase postedFile)
{
try
{
db = new IdentityDBEntities2();
if (ModelState.IsValid)
{
if (postedFile != null)
{
article.image = Convert.ToString(postedFile.ContentLength);
postedFile.InputStream.Read(System.Text.Encoding.Unicode.GetBytes(article.image), 0, postedFile.ContentLength);
string fileName = System.IO.Path.GetFileName(postedFile.FileName);
string FilePath = "~/Content/img/" + fileName;
postedFile.SaveAs(Server.MapPath(FilePath));
}
article.UserId = System.Web.HttpContext.Current.User.Identity.GetUserId();
article.Idc = Convert.ToInt32(Request["cab"]);
db.Articles.Add(article);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(article);
}
catch(Exception e) { Response.Write(e.Message); }
return View();
}
谢谢。
答案 0 :(得分:0)
图像被保存为字节数组在数据库中。所以你的电话
article.image = Convert.ToString(postedFile.ContentLength);
如果要保存实际图像,没有任何意义。您将需要执行以下操作:
var ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //Specify format here; (image is of type System.Drawing.Image)
article.image = ms.ToArray();
您的图片属性必须为byte[]
类型,而基础数据库列则必须为VARBINARY
。
编辑:您得到一个错误,因为image
的类型必须为System.Drawing.Image
,如注释中所述。如果您不能(或不想)使用它,则需要像这样从'HttpPostedFileBase'中提取字节数组:
var ms = new MemoryStream();
postedFile.InputStream.CopyTo(ms);
article.image = ms.ToArray();
完成所有这些操作后,可以在视图上显示图像,如下所示:
创建一个新操作,该操作将为每篇文章返回图像
public ActionResult GetImage(int id)
{
var article = db.Articles.First(i => i.Id == id);
return File(article.image, "image/png"); //Adjust content type based on image type (jpeg, gif, png, etc.)
}
在视图上替换代码,以便它从该操作中获取图像。
更改
`@Html.EditorFor(model => model.image, new {htmlAttributes = new { @class = "form-control" ,@type="file" } }`
到
`<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />`
请注意,这不会使图像可编辑。您最好问一个新问题,是否需要此功能,因为此答案已经超出了您最初的问题所在。