最佳做法 laravel 中保存产品图片

Best practice save product image in laravel

例如每个产品我都有一张照片

烹饪书 -> cook_book.jpg

为此,我在产品 table 中为图像名称

创建了一个列
+-----------------------+------------------------+
|       product_name    |       image_name       |
--------------------------------------------------
|       cook book       |     cook_book.jpg      |
--------------------------------------------------

我将这张图片保存在 Storage 路径

/storage/app/image

- small_cook_book.jpg
- large_cook_book.jpg
- thumb_cook_book.jpg
- bw_small_cook_book.jpg
- bw_large_cook_book.jpg
- bw_thumb_cook_book.jpg
- ... (other image for other products)

bwbw_thumb_cook_book.jpg= 黑白图像中

如您所见,我需要 3 种不同的尺寸,对于每种尺寸,我都需要一张黑白图像

有没有更好的方法来创建这个结构?

比如更多的文件夹 或者把所有的地址存入数据库或者接收时转成黑白或者接收时改变图片大小

storage/app/images/{PRODUCT_ID}/{SIZE}/{BW|COLOR}

像这样创建文件夹:

创建产品时使用保存的产品 ID 创建文件夹。

然后在新创建的文件夹中创建名为 size 的文件夹,然后在 size 文件夹中创建另外 2 个名为 BW 和 Color 的文件夹。

现在,无论何时您需要删除产品,您都可以轻松删除任何特定文件夹或文件,而不会弄乱其他文件。

这是最好的方法。我在我的 SaaS 产品中使用相同的结构,这样我可以记住图像并且我可以直接访问它们而不是一个文件夹一个文件夹地访问。

将大量文件存储在一个目录中不是一个好习惯,而且我也看不出有什么理由将每个产品所需的 6 张照片拆分到子文件夹中。

一种解决方案是为每个产品创建一个文件夹,即

/storage/app/image/product_key_1/all_images_here
/storage/app/image/product_key_2/all_images_here
etc.

但是如果你打算有成千上万的产品,恐怕你会遇到性能问题。 然后,您可以按创建年份(Wordpress 方式)将它们分开,即

/storage/app/image/2020/01/product_key_1/all_images_here
/storage/app/image/2020/02/product_key_2/all_images_here
etc.

或通过产品密钥的前两个字母(Magento 方式),即

/storage/app/image/p/r/product_key_1/all_images_here
/storage/app/image/o/t/other_product_key/all_images_here
etc.

或者使用像 amazon s3 这样的存储。