【发布时间】:2018-08-24 03:57:51
【问题描述】:
将文件(图像)存储在public/images 文件夹和将它们存储在storage/app/public 有什么区别?
【问题讨论】:
将文件(图像)存储在public/images 文件夹和将它们存储在storage/app/public 有什么区别?
【问题讨论】:
公共文件夹意味着文件可以公开访问。例如,存储在public/images/my-image.jpeg 中的图像可以被任何人查看
mysite.com/images/my-image.jpeg
但是,存储在storage 目录中的文件仅对您的应用可用。
Laravel 有一个 php artisan storage:link 命令,可以将符号链接从 storage/app/public 添加到 public
原因是您的 storage 可能不是您的本地文件系统,而是 Amazon S3 存储桶或 Rackspace CDN(或其他任何东西)
您需要按照文档https://laravel.com/docs/5.6/filesystem 设置文件系统配置
完成此操作后,您可以从存储位置获取/存储文件,而不是将所有内容都放在服务器上。
public 和 storage 有两种辅助方法来显示文件:
存储:storage_path('my-file.jpg')
公众号:asset('my-file.jpg')
【讨论】:
如果您想控制谁可以访问哪些文件,请将文件放入存储中。
如果每个人都可以访问该文件(包括未登录的用户),则公开
【讨论】:
public/images 是一个 webroot 目录。这意味着可以通过网络浏览器访问它mozilla, chrome, etc...
storage/app/public 是cache、logs 的文件夹。
我的文件放在哪里?
经验法则:如果您需要控制谁可以查看这些文件,请将它们放在 storage/app/public 中,否则将它们放在 public/images 中
编辑
正如其他答案指出的 public webroot 目录,任何用户都可以看到它。即使是未登录的用户
【讨论】:
here 提出了一个类似的问题,并回答说:
public 是一个“WEBROOT”目录。它由文件组成,可以是 从浏览器访问。有你的
index.php文件,它需要一个 您的输入点的角色。还有你的css、javascript文件。
storage是缓存、日志等的文件夹。
【讨论】: