在数据库中保存图像名称或完整URL的最佳做法是

时间:2018-08-30 11:43:06

标签: sql database image path

哪种更好的方法将图像名称存储在数据库中?我有两个选择,第一个是仅存储图像名称,例如apple.png,第二种选择是存储完整的图像网址,例如abc.com/src/apple.png

任何帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:1)

最佳做法不是保存完整的图像路径,如abc.com/src/apple.png,而是保存图像的特定域路径。例如:

  • 用户图片:/user/{id}/avatar/img.png

  • 产品图片:/product/{id}/1.png

在这种情况下,您避免将图像粘贴到已定义的服务器,服务器路径,URL等。例如,您将决定将所有图像移动到另一台服务器,在这种情况下,您无需更改数据库中的所有记录。

答案 1 :(得分:1)

这两个答案已经很好地涵盖了它。实际上,最好的方法是保存目录路径,而不是保存整个URL路径。已经说明了一些原因,例如可以轻松地将文件夹移动到另一台服务器,而不必在文件逻辑中进行任何更改。

您可以做的是,将所有内容都放在一个目录中,对其进行引用,然后仅保存图像名称。但是,我会 推荐。其他结构只是使其更容易浏览和浏览。好的文件结构是您以后要感谢自己的东西,以防万一由于某种原因而不得不手动进行操作。

话虽如此,我想将此技巧添加到组合中:

$_SERVER['DOCUMENT_ROOT']。这总是使您从根目录开始,而不必进行诸如../../等繁琐的工作。它看起来像一团糟。

最后,作为图像路径,您将拥有类似的东西:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'].'/'.$row['filePath']; ?>" >

$row['filePath']是您从数据库存储的文件路径。

根据文件路径的保存方式,图像源链接中的/可能会丢失。

答案 2 :(得分:0)

首先,您需要将所有图像上传到项目的公用文件夹中,因此无需保存{ "issuerPaid": [ { "_id": "5b86b18afa04445392ff6542", "voucher_id": "5b7cfa381496bea7d6c5bea4", "voucher_paid_by": "loser", "challenge_loser": [ { "last_name": "Gmail", "first_name": "Vishwas" } ], "voucher": [ { "_id": "5b7cfa381496bea7d6c5bea4", "voucher_name": "Walora" } ] } ] }

如果将所有图像存储在一个目录中,那么仅将图像名称存储在数据库中就没有问题

您可以轻松访问domain name之类的图像

但是如果您的项目中有多个目录,例如

  1. 个人资料:保存用户头像图片,
  2. background:保存背景图片

然后最好将带路径的图像保存在<img src="/foldername/imagename.jpg" />

之类的数据库中

因此您可以访问"/profile/avatar.jpg"之类的图片

答案 3 :(得分:0)

另一种常见的方法是使用cols创建 image

  • id
  • 类型(枚举或整数)
  • 名称(文件名) 在您的应用中定义(模型更好)的类型,例如

USER_AVATAR = 1; PRODUCT_IMG = 2;

为每种图像类型定义路径图:

$paths = [ USER_AVATAR => '/var/www/project/web/images/users', ... ];

并在另一个表中使用此 image 表中的ID。它称为多态关联。这是最灵活的图像存储方式。