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

是否需要将图像路径存储在数据库中?

  •  3
  • sqram  · 技术社区  · 16 年前

    首先,我注意到有 关于此的问题,标记为重复的批次。

    this one .

    这个问题的公认答案虽然部分解决了我的问题,但并没有回答全部问题。

    我的问题是,用户上传了一张图片。我将路径存储在数据库中,将图像文件存储在文件系统中。

    我是否应该将所有4条路径都存储在数据库中,如下所示

    ID  |      original      |    large        |    medium       |    small       |
    ----+--------------------+-----------------+-----------------+----------------+
     1  |  /path/to/original | /path/to/large/ | /path/to/medium | /path/to/small |
    

    car.jpg, car.jpg, large-car.jpg, medium-car.jpg, small-car.jpg

    6 回复  |  直到 9 年前
        1
  •  7
  •   chaos    16 年前

    如果给定行中的所有图像都位于同一位置,我会说它们的基本路径应该是它自己的列(而不是一直从原始图像的完整路径重新导出基本路径)。

    数据库 住在同一个地方,根本不要将基路径存储在此表中;将其写入代码或全局配置表中。

        2
  •  2
  •   The Unknown    16 年前

    ImageID  | UserID  | name.. 
    ---------+---------+-----
    1        | 495     | car454.jpg
    2        | 495     | house.jpg
    3        | 44      | kittysmall.jpg
    

    并将所有图像存储在一个地方。

    这样你就可以很容易地看到谁拥有什么图像,用户也可以用相同的文件名上传不同的图像,而不必担心。

        3
  •  1
  •   Colin DeCarlo Colin DeCarlo    16 年前

    概括地说,我想说,如果你能重新创建信息(因为基础总是相同的,后面跟着用户名),就不要将其存储在数据库中。如果你以后出于任何原因想更改存储图像的目录,你就会遇到麻烦。

        4
  •  1
  •   deceze    16 年前

    当然,对原始映像的各种大小有一个可靠的命名约定,这将有助于您生成已知的缓存键,以便您可以将映像存储在某些缓存中,如memcache,这减轻了数据库和服务器磁盘i/o的负载

        5
  •  1
  •   Gordon Potter    16 年前

    如果除了文件名之外,特定路径是一致的,为什么不使用常量作为路径,然后将不同大小的图像存储在适当的目录中,并仅引用数据库中的文件名。

    这里的主要原则是避免数据库和代码中的重复信息。对于数据库,你实现了更高的范式,对于代码,你实现的是DRY(不要重复自己)。

    /主页/用户/网站/图片/原创/

    /主页/用户/网站/图片/小/

    /主页/用户/网站/图片/媒体/

    /主页/用户/网站/图片/大/

    你可以用常量来表示这些信息。例如

    PATH_ORIGINAL=/home/用户/站点/图像/原始/

    PATH_MALL=/home/用户/站点/图像/小/

    PATH_MEDIUM=/home/user/site/images/media/

    PATH_LARGE=/home/user/site/images/LARGE/

    然后,在你的代码中,你可以做这样的事情

    小车=PATH_TO_SMALL。car.jpg;

    或者,在加载图像的任何查询输出中插入适当的常量变量。

    额外的好处是,如果你需要调整目录结构或在服务器之间移动代码,而不是更新整个数据库记录,你有一个地方可以更改路径,这可能会更有问题,更容易出错。

        6
  •  0
  •   John Parker    16 年前

    推荐文章