MVC-3用户图像管理 - 最佳实践

时间:2011-01-02 21:02:29

标签: image asp.net-mvc-3

使用MVC-3,Razor,C#进行开发

一直在寻找,找不到我正在寻找的建议。我的网站将包含用户上传的图片(可能是一个很高的数字)。管理这些图片的最佳做法是什么(放置,分解为子文件夹等)?如果我定期重新发布我的网站,我在哪里放置它们可以防止它们被意外吹走?

如果有任何好文章或博客文章,那将会有所帮助。此外,任何人想要添加的建议/提示都会很棒。

谢谢你的时间!

Rob

修改

也想知道人们为防止热链接做了什么。

3 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server 2005或更高版本,则可以使用FileStreams。如果文件大小不足1MB,如果将它们存储为VARBINARY(MAX),则可能会有更好的性能。关于存储在数据库中的最佳部分是您可以轻松使用事务。

对于复制和备份,您可以使用标准数据库复制和文件备份。

答案 1 :(得分:1)

我运行的网站拥有大量图片,所有图片都存储在日期文件夹结构中。即2010 / Dec / 31 / image.jpg

这有两个原因。

首先是我的托管计划附带的数据库空间有限(200 MB)。显然,如果我有几千兆字节的空间,我会将它们存储在数据库中。

第二个原因是将文件夹中的图像数量保持在最低限度。目录列表需要更长的时间,其中包含的文件越多,因此每24小时一个新目录就是我的解决方法。

您是否可以告诉我们更多关于您拥有的资源或您估计每天会上传多少图片的信息?

答案 2 :(得分:1)

如果您的数据库中有空间,那么我建议您,因为备份/恢复变得更容易。如果您的数据库空间有限,那么文件夹结构将起作用,但我不会在一个文件夹中存储超过1000个文件。因此,您需要提供一种解决方案,以帮助保持文件夹不会在一个位置保存超过1000个图像和文件夹。如果您认为每天的图像少于1000张,那么Sir Psycho建议的变化可能会很好,这可能是每年的文件夹,然后是年份下的子文件夹,每月和每天存储所有那天的图像。

要回答有关热链接的问题:最好的办法是检查引荐来源网站(应该在图片请求的头部找到),并确保它来自您的域名。如果不是,您可以不发回任何信息,或者发回一个图像,让用户知道他们无法从第三方网站看到图像。

标题数据可能是欺骗性的,但是输入第三方网站的随机访问者不仅没有这样做,而且可能不知道/关心如何。