gpt4 book ai didi

php - 将图像存储在目录中并将对图像的引用存储在数据库中

转载 作者:行者123 更新时间:2023-11-29 01:08:48 27 4
gpt4 key购买 nike

我目前正在参与一个项目,该项目旨在为他们的创意媒体类(class)创建一个网站,该网站允许用户共享图像并为其评分。

我正在尝试寻找将图像保存到 mysql 数据库的方法。我知道我可以将图像保存为 blob,但这行不通,因为我计划只允许用户保存高分辨率图像。因此,我试图找出如何将图像存储在目录/服务器文件夹中以及如何将对图像的引用存储在数据库中。更复杂的是,引用必须自动保存在 mysql 数据库表中。

有人知道怎么做吗?或者指出正确的方向?

谢谢!

最佳答案

我实际上建立了一个类似的网站(海量图片 uploader ),所以我可以根据经验发言。

跟踪文件

将图像文件按原样保存在磁盘上,并将该文件的路径保存在数据库中。这部分应该非常简单。

一个缺点是您需要为每个图像进行数据库查找,但如果您的表经过良好优化(索引),这应该不是真正的问题。

有很多优点,例如您的文件很容易被引用,您可以将元数据添加到您的文件(如浏览次数)。

文件名

现在,保存文件,很多文件,并不是直接就能做到的。

如果您根本不关心文件名,只需生成一个随机散列,例如:

$filename = md5(uniqid()); // generate a random hash, mileage may vary

这解决了所有类型的文件名相关问题,例如重复的文件名、不支持的字符等。

如果要保留文件名,请将文件名存储在数据库中。

如果您希望磁盘上的文件名也具有某种人类可读性,我会采用混合方法:部分是散列,部分是原始文件名。您将需要过滤不支持的字符(如 /),并可能音译相似的字符(如 é -> eß -> ss) .中文和希伯来语等外语可以提供有趣的结果,因此请注意这一点。您还可以对任何外来字符进行编码(如 base64_encode),但这对可读性没有多大帮助。

最后,请注意文件路径长度限制。文件名和文件路径不能无限长。我相信 Windows 的完整路径是 255。

您绝对应该考虑使用存储桶,因为操作系统(和人类)不喜欢包含数千个文件的文件夹。

如果您使用的是哈希,那么您已经有了一个方便的桶方案。

如果您的哈希是 0aa1ea9a5a04b78d4581dd6d17742627

您的存储桶可以是:0/a/a/1/e/a9a5a04b78d4581dd6d17742627。在这种情况下,有 5 个嵌套的桶。这意味着在 16^5(约 100 万)个文件之后,您可以期望在每个存储桶中有一个一个文件。您需要多少级桶由您决定。

Mime 类型

跟踪原始文件扩展名/mime 类型也很好。如果您只有一种 mime 类型(如 TIFF),则无需担心。大多数文件都有一些方法可以轻松检测到它是该格式的文件,但您不想依赖它。 PNG 以 PNG 开头(使用文本编辑器打开一个以查看它)。

相对路径与绝对路径

我还建议保存文件的相对路径,而不是绝对路径。这使维护变得更加容易。

所以保存:

0/a/a/1/e/a9a5a04b78d4581dd6d17742627

代替:

/var/www/wwwdata/images/0/a/a/1/e/a9a5a04b78d4581dd6d17742627

关于php - 将图像存储在目录中并将对图像的引用存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22028259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com