哪种方法在数据库中存储图像名称更好?我有两个选择,第一个是只存储图像名称,例如apple.png
和第二选择是存储完整的图像URL,例如abc.com/src/apple.png
.
任何帮助将不胜感激。谢谢。
最佳做法不是像 abc.com/src/apple.png 那样将完整路径保存到映像,而是将特定域路径保存到映像。前任:
-
用户图片 :/user/{id}/avatar/img.png
-
产品图片:/产品/{id}/1.png
在这种情况下,您可以避免将图像粘贴到定义的服务器,服务器路径,URL等。例如,您将决定将所有图像移动到另一台服务器,在这种情况下,您无需更改数据库中的所有记录。
这两个答案已经很好地涵盖了它。保存目录路径而不是保存整个 URL 路径确实是最佳做法。已经涵盖了一些原因,例如可以轻松地将文件夹移动到另一台服务器,而无需对文件逻辑进行任何更改。
您可以做的是将所有内容都放在一个目录中,引用该目录,然后保存映像名称。但是,我不建议这样做。另一种结构只是使导航和浏览更容易。良好的文件结构是你以后会感谢自己的,以防你由于某种原因不得不手动完成事情。
话虽如此,我想将这个技巧添加到组合中:
$_SERVER['DOCUMENT_ROOT']
.这总是使您从根目录开始,而不必做繁琐的事情,例如../../
等。看起来一团糟。
因此,最后作为图像路径,您将得到如下内容:
<img src="<?php echo $_SERVER['DOCUMENT_ROOT'].'/'.$row['filePath']; ?>" >
$row['filePath']
是数据库中存储的文件路径。
根据文件路径的保存方式,您可能会丢失图像源链接中的/
。
首先你需要上传项目公共文件夹中的所有图像,所以不需要保存domain name
如果您将所有图像存储在一个目录中,那么在数据库中仅存储图像名称没有问题
您可以轻松访问<img src="/foldername/imagename.jpg" />
等图像
但是,如果您的项目中有多个目录,例如
- 个人资料:保存用户头像图片, 背景
- :保存背景图像,
那么最好将带有路径的图像保存在数据库中,例如"/profile/avatar.jpg"
因此,您可以像<img src="imagepathhere" />
一样访问图像
另一种常见的方法是使用 cols 创建图像表
- 编号
- 类型(枚举或整数(
- 名称(文件名( 在应用中定义类型(在模型中更好(,例如
USER_AVATAR = 1;
PRODUCT_IMG = 2;
为每个图像类型定义路径映射,例如:
$paths = [
USER_AVATAR => '/var/www/project/web/images/users',
...
];
并在另一个表中使用此图像表中的 ID。它被称为多态性关联。这是存储图像的最灵活方式。