我在页面上有一个图像,例如<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
放在流中,以便我可以保存它或者这样做的正确方法是什么?
答案 0 :(得分:3)
通常不建议将数据存储在数据库或RDBMS中的任何其他类型的文件中。什么是最有效的方法,将文件存储在服务器上的磁盘上,并将该路径存储在表中。
因此,每当您需要引用该图像/文件时,请从数据库中获取路径,然后从磁盘读取该文件。这大致有两个好处。
答案 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。