代码之家  ›  专栏  ›  技术社区  ›  scottm

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

  •  1
  • scottm  · 技术社区  · 15 年前

    我的问题是显示缩略图和存储。

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

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

    如果照片较大,并且您希望显示缩略图,是否最好:

    • 保存图像副本和缩小的图像,仅在需要时显示较大的图像?
    • 使用HTML减小大小?
    4 回复  |  直到 15 年前
        1
  •  4
  •   dj_segfault    15 年前

    在数据库中存储图像几乎总是个坏主意。blobs确实可以减慢数据库的运行速度。它还限制了您在不同驱动器上分散存储的能力。当文件是独立的时,您甚至可以拥有一个或多个独立的映像服务器来减少主动态服务器上的负载。我的建议是:

    • 在数据库表中,对于映像所在的目录和映像名称,都有列。这样,您就可以自由地更改存储图像的位置、循环驱动、稍后添加更多存储并将新图像放入新存储或任何您想要的内容。将路径和文件名存储在不同的字段中,可以轻松地将图像从一个目录移动到另一个目录。

    • 您肯定希望生成缩略图以减少网络带宽并使应用程序运行更快。但是,您可以根据需要或在系统负载较低时生成缩略图。如果您使用的是Linux,ImageMagick非常擅长自动调整图像的批量大小。它甚至可以按百分比而不是绝对量调整大小。

        2
  •  0
  •   brianegge    15 年前

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

    其他软件将其存储在一个目录中。这就是2号厨房的运作方式。我发现目录方法更容易扩展。如果请求的大小与原始大小不同,通常应用程序将使用ImageMagick调整照片的大小,然后存储调整大小的照片的副本。

    另一种选择是将照片重新上传到S3这样的服务,而不是将照片存储在本地。

        3
  •  0
  •   Craig    15 年前

    这是一个常见的问题,最基本的答案是它取决于。你需要提供更多的信息。您打算使用什么数据库?SQL Server 2008具有一些很好的新功能,可以使用filestream函数处理此方案。一般来说,我更喜欢将它们放在数据库中,但是如果您只是将它们塞进数据库中而不考虑设计和访问要求,那么随着照片数量的增加,性能可能会很差。

        4
  •  0
  •   ChrisLively    15 年前

    如果您绝对肯定您的Web服务器将始终能够访问托管图像的文件系统,那么就走这条路线。也许吧。

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

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

    甲骨文已经有一些不错的文件存储设备有一段时间了。MySQL?我不想尝试,但你可能没事。

    关于第二个问题:将缩略图与图像一起保存。此过程仅在每个图像上发生一次,并保存在表示带宽上。使用HTML来缩小图像的大小对客户机实际上没有任何作用。