你如何为asp.net 应用程序存储图像?

Jar*_*ban 5 .net asp.net storage image

我们只是将我们的 ASP.Net 商店实现(从简单的)升级到应该更灵活的结构。我只是在寻找一些如何存储与产品相关的图像的选项。(将有两种类型的图像,产品的拇指和产品的全视图图像)。它应该处理至少一百种产品。

到目前为止,我正在考虑两个选项:
1)将图像存储在 db 中 - 图像从 Db 加载到流中,然后加载到图像中(使用 IHttpHandler 显示)
优点
- 图像本身是我们正在使用的类的一部分,业务对象代码隐藏
- 一个地方来维护产品数据
缺点
- 内存消耗 - 当我们从其他 API 获取产品数据时,流量会增加

2)将图像存储在文件系统-图像放在页面链接
优点
-对记忆的影响没有,因为它是没有存储在会话,应用cache.It使用像简单的链接
-没有内存消耗
缺点
-需要保留一些命名惯例对于文件系统中的图像(甚至可能是某些文件夹结构)
- 更复杂的图像维护

还有其他合适的机制吗?你会建议使用什么?

就个人而言,我更喜欢文件系统中的图像,但由于有两个不同的位置,因此维护它可能会更困难。

感谢您的任何评论。X。

BTW:我真的可以想象,在某个阶段,产品也会有一些视频或任何其他媒体也需要展示。在这种情况下, Db 不是真正的选择,不是吗?

Kir*_*ein 5

我做了一个与此类似的系统。在我看来,页面加载速度胜过所有其他考虑因素,因此我选择了“在磁盘上存储图像”选项。

将图像添加到系统后,原始图像将被裁剪并调整为浏览所需的显示尺寸,同时还会生成缩略图。然后将三个图像存储到磁盘:原始图像、显示尺寸和缩略图。每个文件都有一个为其文件名生成的 GUID。

(想象一下在亚马逊购物,当您浏览产品列表时,只有缩略图可见。当您检查产品时,会显示其显示尺寸,通常可以再次单击图像以查看完整尺寸。)

我有一个看起来有点像这样的数据库表。

ID                int, PK
FullSizePath      varchar(128)
DisplaySizePath   varchar(128)
ThumbNailPath     varchar(128)
OriginalData      BLOB
Run Code Online (Sandbox Code Playgroud)

我将原始数据保留在数据库中,以防万一文件服务器发生意外并且图像被删除,因此它们都可以重新生成。但在页面请求期间永远不会从数据库中提取这些数据。

  • 也许。这取决于您的备份解决方案。我们的网络服务器上的文件没有备份,它们存在于源代码管理中。但我们的数据库是每晚备份的,因此对我们来说将原始数据保留在数据库中更有意义。 (2认同)