管理网站用户照片的最佳方式是什么?

问题描述:

我的问题是关于显示缩略图和存储。管理网站用户照片的最佳方式是什么?

比方说,我有一个网站,用户可以上传照片并在相册中查看照片。

照片通常存储在这种情况下如何?图像本身还是通常存储在数据库中的文件路径?

如果照片是大,你要显示的缩略图,是它更好地:

  • 保存图像的副本,并缩小尺寸图像,只有当要求显示更大?
  • 使用HTML缩小尺寸?
+0

对于存储确认问题http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay另外,我想保存图像的缩略图。 – Favio 2009-08-06 02:35:22

将图像存储在数据库中几乎总是一个坏主意。 BLOB可以真正减慢数据库的速度。这也限制了你在不同驱动器周围传播存储的能力。当文件分开时,甚至可以有一个或多个单独的映像服务器来减少主动态服务器上的负载。我的建议是:

  • 在您的数据库表中,包含图像所在的目录和图像名称的列。这样,您可以自由更改存储图像的位置,循环驱动器,稍后添加更多存储空间并将新映像放入新存储或任何您想要的内容。将路径和文件名存储在单独的字段中使得将图像从一个目录移动到另一个目录变得微不足道。

  • 您一定要生成缩略图图像以减少网络带宽并使您的应用程序运行更快。但是,您可以根据需要或系统负载较低的情况下生成缩略图。如果你在Linux上,ImageMagick在自动批量调整图像大小方面非常出色。它甚至可以通过百分比来调整大小,而不是绝对数量。

+0

https://imageresizing.net和http://imageflow.io足以快速生成缩略图(单一来源成像)。您可以在后端使用网络存储或任何类型的blob存储。 – 2016-05-20 22:49:46

某些软件如TikiWiki将照片存储在数据库中。然后,它还会在数据库中缓存缩略图大小的照片。

其他软件将其存储在一个目录中。这是Gallery2的运作方式。我发现目录方法更具可扩展性。如果请求的尺寸不是原始尺寸,通常应用程序将使用ImageMagick调整照片大小,然后存储调整大小的照片副本。

另一种替代方法是将照片重新上传到像S3这样的服务,而不是在本地存储照片。

这是常见的问题,基本的答案是,它取决于。你需要提供更多信息。你打算使用哪个数据库? SQL Server 2008具有一些用FILESTREAM函数处理这种情况的好的新功能。通常我更喜欢把它们放在数据库中,但是如果你只是将它们放入其中而不考虑设计和访问需求,那么随着照片数量的增加,性能可能会变差。

如果您绝对确定您的Web服务器将始终访问托管映像的文件系统,请转到该路由。也许。

但是,如果您在任何时候认为您可能需要创建映像服务器,因为Web服务器上的硬盘驱动器空间不足,或者需要运行多个Web服务器,然后省去麻烦并将它们存储在数据库中。存储在文件系统中的难点在于跨网络的安全需求。

另外,请记住,并非所有数据库服务器在这方面都是相同的。 SQL 2008引入了FILESTREAM数据类型,它实际上将图像存储在本地文件系统上,同时允许通过数据库服务器进行所有读/写访问。这还有一个额外的好处,即允许您在存储时对传入文件运行病毒扫描程序。

甲骨文现在有一些不错的文件存储设施。 MySQL的?我不认为我想尝试,但你可能会好起来的。

至于第二个问题:与图像一起保存缩略图。此过程每个图像只出现一次,并节省演示带宽。使用HTML缩小图像的大小确实对客户端没有任何帮助。