在我的asp.net mvc网站上拥有用户托管图库的最佳方式是什么?

时间:2010-11-05 02:49:20

标签: c# asp.net-mvc image

我有一个网站,其中一个页面是一组静态图片。用户希望能够上传自己的图片并显示它而不是静态列表。我看到这样的代码解释了good way to have an upload interface for pictures。我想知道我是否应该将图片存储在我的网络服务器文件系统或我的SQL服务器数据库或其他地方。

这里有关于最佳做法的建议吗?

2 个答案:

答案 0 :(得分:2)

在链接的示例中,您建议程序员使用xml文件。 对于低频段站点和少量图像,此解决方案是上帝。 但是如果两个用户同时尝试上传文件会有什么问题呢?可能第二个用户会收到错误,因为xml文件已经在使用中。

我建议您将图片存储在文件系统中,并将图片元数据(描述,标签,地理标记...)存储在数据库中。

避免将二进制数据存储在db 中。您将获得非常低效的数据库性能和非常大的尺寸。

答案 1 :(得分:0)

存储在文件系统中更容易实现,您可以利用目录结构。但是,如果您需要的不仅仅是简单的hirerachy结构(例如标记),那么很可能您需要一个数据库来执行索引(可以是SQL服务器或XML Dbs)。

这是第二个问题。如果需要索引,元数据存储在DB中,实际的二进制图像数据怎么样?将二进制文件放在SQL中很容易维护,但是您需要从Web服务器实现自定义缓存策略(将映像数据转储到Web服务器本地磁盘驱动器),以避免Web / db之间的过多流量。

另一方面,您可以将密钥保存在db中,并将映像保存在本地磁盘(Web服务器)中,这很容易实现,但可能会出现两个问题:

  1. 更难以扩展。想象一下,您需要多个Web服务器,同步这样的内容可能是个问题。

  2. 文件系统索引。如果将文件存储在本地,则很可能所有文件都驻留在一个文件夹中。对于任何文件系统,存储在一个位置的文件越多意味着它可以查找或从中获取内容的速度越慢。图库可能会增长到数千和数百万个文件,这可能会导致问题。 (当然,您可以采用一些策略来分离存储,但这会增加复杂性)。