【问题标题】:MySQL - storing images in a database? [duplicate]MySQL - 将图像存储在数据库中? [复制]
【发布时间】:2023-04-09 22:47:01
【问题描述】:

假设我们表格的每一行都包含有关各种待售车辆的信息。每个用户可以存储每辆车的多张图像。 存储这些图像的好方法是什么?

复制: User Images: Database or filesystem storage?
复制: Storing images in database: Yea or nay?
复制: Should I store my images in the database or folders?
复制: Would you store binary data in database or folders?
复制: Store pictures as files or or the database for a web app?
复制: Storing a small number of images: blob or fs?
复制:强>store image in filesystem or database?

【问题讨论】:

  • 这个问题已经被问过很多次了。

标签: php mysql


【解决方案1】:

听起来像是家庭作业。您需要从 vehicles 表到 pictures 表的一对多关系。 pictures 表将包含一个带有图像的 BLOB 列。或者它可以包含一个 VARCHAR 列,其中包含存储在磁盘上的图像文件名。

【讨论】:

  • 恕我直言,数据库是存储图像的错误位置。只存储图像的位置。
  • 我同意,大多数时候。我认为这是家庭作业,OP 需要了解这两种常见的方法。
  • 您可以使用单个文件夹,数据库应该知道哪些文件归哪个用户所有,因此由您的代码决定哪些内容可以被用户覆盖,哪些内容不能。您可以使用 PK ID + 文件类型扩展名存储图像,或者作为 MD5 哈希或.....多种方式存储图像,但不要使用原始文件名存储它们。这会带来更多问题(文件名中的空格,特殊字符.. aso.)
  • @DJDonaL3000:如果您在单个文件夹中存储太多图像,大多数文件系统都会变慢。解决此问题的一种方法是使用分层文件夹结构。例如,如果您的图像命名为 100.jpg、101.jpg、225.jpg 等,则创建一个文件夹 /images/100 并将图像 100-199 存储在其中。创建一个文件夹 /images/200 等。另一种方法是使用hash buckets,其中每个存储桶对应于文件系统中的一个文件夹。
  • 另一种方法是使用 Amazon S3 之类的东西,您可以将无限数量的唯一命名图像放入一个存储桶中,然后通过网页中的 URL 引用它们。跨度>
【解决方案2】:

我希望你应该将图片存储在一些文件夹中,这样在检索时会很容易。如果要存储在数据库中,可以使用 BLOB 数据类型。

【讨论】:

    【解决方案3】:

    将图像数据直接存储在数据库中的开销可能会成为一个问题,尤其是对于具有大量流量的大型网站。

    通常我有一个将图像存储在服务器上的命名约定,并且文件名是从用户上传的任何内容中重写的,但是如果您愿意,您可以保留用户的原始文件名 - 只要确保对它们进行消毒。数据库只存储图像的元数据,因此对图像文件的请求可以直接由网络服务器处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2012-06-08
      • 2010-11-07
      • 2011-04-18
      • 2013-03-01
      • 2012-10-17
      相关资源
      最近更新 更多