1. MSSQL储存图片的需求
在MSSQL数据库中,我们经常需要储存一些图片,例如商品图片、用户头像等等。储存图片的方式有很多种,例如将图片存储在服务器的文件系统中,通过文件路径来引用,或者将图片转换成二进制数据存储在数据库中。本文将介绍将图片以二进制数据的形式存储在MSSQL数据库中的简便技巧。
2. 创建表格
2.1 创建文件表格
在MSSQL中,我们需要创建一个表格来存储图片。首先创建文件表格:
CREATE TABLE [dbo].[Files](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FileName] [varchar](100) NULL,
[Extension] [varchar](50) NULL,
[MimeType] [varchar](50) NULL,
[Data] [varbinary](max) NULL,
CONSTRAINT [PK_Files] PRIMARY KEY CLUSTERED
(
[Id] ASC
)
)
表格里包括文件名、文件后缀名、MIME类型和二进制数据。其中,varbinary(max)类型可以存储最大2GB的二进制数据。
3. 存储图片
现在,我们需要将图片转换成二进制数据,并存储在数据库中。可以使用C#或VB.NET编写代码实现,以下是C#的示例代码:
using (var stream = new MemoryStream())
{
image.Save(stream, ImageFormat.Png);
var file = new File
{
FileName = "test",
Extension = ".png",
MimeType = "image/png",
Data = stream.ToArray()
};
context.Files.Add(file);
context.SaveChanges();
}
在这段代码中,我们通过MemoryStream将图片转换成二进制数据,然后创建一个File对象,将相关属性赋值,最后将对象添加到DbContext中,并调用SaveChanges()方法保存到数据库中。
4. 显示图片
现在,我们需要从数据库中读取图片数据,并显示在网页上。以下是ASP.NET MVC的示例代码:
public ActionResult Image(int id)
{
var file = context.Files.Find(id);
if (file == null)
{
throw new HttpException(404, "File not found");
}
return File(file.Data, file.MimeType);
}
在这段代码中,我们首先通过Id找到对应的File对象。如果对象不存在,抛出404异常。如果文件存在,将二进制数据以指定的MIME类型返回给前端。
5. 总结
通过将图片以二进制数据的形式存储在MSSQL数据库中,省去了管理文件的繁琐和权限问题,同时也方便了备份和恢复。