在索引页面中创建后无法加载资源图片

时间:2019-02-28 11:47:35

标签: c# asp.net asp.net-mvc

你好,我正在尝试从本地文件夹向我的数据库添加图像,并且工作成功,但是保存了路径,并且在索引页面上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();
    }

谢谢。

1 个答案:

答案 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(); 

完成所有这些操作后,可以在视图上显示图像,如下所示:

  1. 创建一个新操作,该操作将为每篇文章返回图像

    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.) }

  2. 在视图上替换代码,以便它从该操作中获取图像。

    更改

    `@Html.EditorFor(model => model.image, new {htmlAttributes = new { @class = "form-control" ,@type="file" } }`
    

    `<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />`
    

请注意,这不会使图像可编辑。您最好问一个新问题,是否需要此功能,因为此答案已经超出了您最初的问题所在。