在Web服务器上存储和检索图像的最佳方法是什么?

5
我有一个网站,它大量依赖于我的 SQL 数据库。我将产品信息存储在数据库中,并使用 PHP 检索和格式化它。我想将图片加入其中,但不知道从哪里开始。由于它们的高分辨率,所以我认为不建议将它们存储在实际数据库中,但我不希望其他管理员花费数小时来输入产品信息和图片。目前,管理员填写表单,验证信息是否正确,然后将信息存储并显示在网站上。当涉及到图片时,我能想到的最好的办法是将图像名称和位置添加到产品信息中,并使用 PHP 调用它,但我不希望我的管理员花费整天时间命名照片并手动输入名称。非常感谢您能提供任何想法。

最佳方法因人而异,但我建议在数据库中存储确切的图像位置,然后在src中回显该位置。 - Script47
你是正确的 - 将图像存储在数据库中虽然可能,但并不建议 - 特别是当它们是高分辨率时。你可以很容易地编写一个脚本来扫描目录并将每个图像添加到数据库中。你还可以向管理员提供一个可视化图像选择器,以便他们点击图像以将该图像/路径添加到表单中。 - Professor Abronsius
你说你不想让他们花一整天的时间来命名照片,但是除此之外,这些图片怎么可能会有名字呢? - Joseph Young
2个回答

0

最佳做法是将图片保存在网站上,例如一个“桶”(bucket),更好的选择是使用CDN [如AWS S3]而不是你自己的服务器,并将URL路径和名称存储在数据库中。虽然数据库有存储图像的能力,但我不建议您这样做。

工作流程是创建一个表单,用户可以将图像上传到服务器,然后在您的item_images表中插入名称、扩展名和URL

检索图像时,例如在产品目录中,只需从数据库中查询URL并使用PHP向用户显示,将URL放置在每个标记的src属性内即可。

<img alt="" src="<?php echo img_url[];?>" width="" class="">

需要考虑的事项:

文件(如图像)需要特定的编码类型
<FORM id="" method="post" action="" enctype="multipart/form-data">
文件不是通过 $_POST 或 $_GET 获取,而是通过 $_FILES 数组。 在将上传的文件存储到服务器之前,请先清理它们,避免使用.exe.php和许多其他文件格式。 使用 GETIMAGESIZE() 限制图像的大小和 MIME 类型。 使用 MOVE_UPLOADED_FILE 在服务器上物理存储图像,因为在此之前,文件仅是临时文件。 命名图像最好采用语义化的网络方法,并将其与每个项目的 ID 结合使用。
$ image_name = $item_category. $item_id. $extension

目前我选择将URL保存到数据库中。我在想是为每个链接都有多个列更好,还是有一种方法可以将它们全部存储在一个列中并逐个回显? - Hunter

0

个人而言,我建议将图像存储在持久且可扩展的存储设施中,例如Amazon S3,这样可以为您减轻很多负担,并使得您能够以成本效益的方式在任何规模(小或大)上托管图像。

您无需担心人工手动命名图像文件,因为它们可以通过代码随机分配唯一名称。例如,您可以使用图像文件的md5值来唯一标识图像,并仅将其S3存储桶和对象ID存储在数据库中,以便稍后更改某些信息时轻松从Web检索它们。

此外,由于您声明将在数据库中将图像与特定产品相关联,因此可能没有必要全局识别唯一的图像数据。您只需将其限制为关联的产品即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接