我想在数据库中保存图像
本文关键字:保存 图像 数据库 | 更新日期: 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中的任何其他类型的文件中。最有效的方法是将文件存储在服务器上的磁盘上,并将该路径存储在表中。
因此,当您需要引用该映像/文件时,请从数据库中获取路径,并从磁盘读取该文件。这大致有以下两个好处。
- 删除广泛的转换过程(从图像到二进制和亦然)。
- 帮助直接读取图像(软读)。
不建议将图像保存在数据库中,但如果坚持要将其保存在数据库中,可以将图像转换为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字符串。