我想将图像保存在数据库中

时间:2015-09-14 11:39:39

标签: c# asp.net

我在页面上有一个图像,例如<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放在流中,以便我可以保存它或者这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

通常不建议将数据存储在数据库或RDBMS中的任何其他类型的文件中。什么是最有效的方法,将文件存储在服务器上的磁盘上,并将该路径存储在表中。

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

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

答案 1 :(得分:1)

不建议在数据库中保存图像,但如果您坚持将其保存在数据库中,则可以将图像转换为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;

我合并了converting a base 64 string to an image and saving it的一些代码 来自Convert image path to base64 string