使用MVC和Sql Server存储和检索图像

时间:2010-01-15 12:46:31

标签: asp.net sql-server asp.net-mvc image

我正在设计一个需要存储图像的应用程序原型,类似于facebook。这将是一个面向公众的网站,我不确定我最终会有多少用户,但我正在寻找的是一种有效检索它们的方法。

到目前为止,我正在考虑将它们存储在SQL Server varbinary列中。这是一个好主意吗?我有上传代码和存储代码。我担心的是检索它们。我可以在运行中退出并构建图像标签,但我担心每个人都必须访问数据库。

我一直在考虑为用户获取所有图像并将其缓存在asp.net缓存中10到30秒。我从来没有做过这样的事情所以我有兴趣听一些不同的方法。显然,图像的大小可能不同,我正在考虑定义大小限制,但我还没有那么远。

感谢您的帮助。 Paul Speranza

3 个答案:

答案 0 :(得分:2)

我认为IIS在缓存静态内容方面做得非常好,所以我可能只是将图像保存在磁盘上并保存有关它们在数据库中的位置的信息。

答案 1 :(得分:2)

不要将图像存储在数据库中。这会损害您的数据库和您的网站的性能。

唯一的例外是,如果您要使用SQL 2008的FILESTREAM类型,它基本上使用文件系统来存储文件,并在数据库中保留对它的引用。

绝对不要将原始图像数据存储在varbinary列中。

答案 2 :(得分:0)

首先,您可以在将图像放入sql server之前重新调整图像大小。 此外,您可以创建一个从sql server检索图像的http处理程序,但我会将缓存设置为一两分钟,而不是更少。它们没有那么大的变化。

context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));

另一种选择是存储在文件服务器上,您可以在IIS具有权限的任何地方编写这些文件,并将“url”文件存储在数据库中,如“C:\ images \ test.jpg”。但是当你删除记录时,你必须写一些东西来删除文件。