我想在数据库中保存图像

本文关键字:保存 图像 数据库 | 更新日期: 2023-09-27 18:12:34

我在一个页面上有一个图像,例如<img id="img3" runat="server" src="image.jpg" width="200" height="200"/>,我想用存储过程保存src属性在我的数据库中引用的图像。

我应该先把图像转换成二进制。以下是目前为止的内容:

    Stream fs = FileUpload1.PostedFile.InputStream;
    BinaryReader br = new BinaryReader(fs);
    Byte[] bytes = br.ReadBytes((Int32)fs.Length);
    cmd.Parameters.AddWithValue("@img", byte);

但问题是我不想保存上传的图像FileUpload1.PostedFile.InputStream,我想保存我有src的图像。

是否有一种方法可以将图像src放在流中,以便我可以保存它,或者这样做的正确方法是什么?

我想在数据库中保存图像

一般不建议将图像存储在Database或RDBMS中的任何其他类型的文件中。最有效的方法是将文件存储在服务器上的磁盘上,并将该路径存储在表中。

因此,当您需要引用该映像/文件时,请从数据库中获取路径,并从磁盘读取该文件。这大致有以下两个好处。

  1. 删除广泛的转换过程(从图像到二进制和亦然)。
  2. 帮助直接读取图像(软读)。

不建议将图像保存在数据库中,但如果坚持要将其保存在数据库中,可以将图像转换为base64,然后将base64字符串保存在数据库中。

using (Image image = Image.FromStream(FileUpload1.PostedFile.InputStream))
{                 
    using (MemoryStream m = new MemoryStream())
    {
        image.Save(m, image.RawFormat);
        byte[] imageBytes = m.ToArray();
        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);
        //Now save the base64String in your database
    }                  
}

并将其从base64转换回图像:

public Image GetImageFromBase64String(string base64String)
{
    byte[] bytes = Convert.FromBase64String(base64String);
    Image image;
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        image = Image.FromStream(ms);
    }
    return image;

我结合了一些将64位字符串转换为图像并保存的代码将图像路径转换为base64字符串。