【发布时间】:2021-11-07 23:06:44
【问题描述】:
我做了什么
当我研究在 laravel 中存储文件时。我遇到了两种方法。
- 将资产直接存储在公用文件夹中。
- 创建从
public/storage到的符号链接storage/app/public
当我研究哪一个两个使用时,我遇到了这个堆栈溢出链接。 ??? Difference between storing files in public directory and in storage in Laravel 5.4 在上面提到的答案中的这个链接中,
公共文件夹意味着文件可以公开访问。
例如存储在
public/images/my-image.jpeg可以被任何人查看 去mysite.com/images/my-image.jpeg但是,存储在 storage 目录中的文件仅供您的 应用程序。
????因为,包括上面提到的堆栈溢出帖子,以及我在不同平台上阅读的许多其他帖子,都暗示public 目录中的文件可以通过网络访问,而storage 目录中的文件则不能,我试图通过将文件同时存储在public 目录和storage 目录中,一次一个,然后检查这些文件是否可以通过 Web url 访问来测试这一点。
我的尝试如下,
- 首先我在公共中添加了路径
images/目录并放置一些图像(让我们说test1.jpg、test2.jpg和test3.jpg) 进入该目录。然后在我的刀片里面 我的src属性的模板img标签我称它们为URL('images/test1.jpg')等等……他们确实是 呈现在网页上。然后我也尝试从 网址通过去http://localhost:8000/images/test.jpg。结果是 正如预期的那样,图像在网页上呈现 + 它们是 从网址访问 - 然后我运行命令
php artisan storage:link在控制台上,根据我阅读的文章,应该 在目录之间创建symbolic linkpublic/storage和storage/app/public。 运行命令后,我得到了一个名为的新文件夹storage创建于public目录。然后我把我所有的图片都移到了那个public/storage目录。然后设置src将我的img标记为URL('storage/test1.img')等等...图片是 呈现在网页上。然后我试图检查图像是否 仍然可以从 url 访问。为此,我去了网址栏http://localhost:8000/storage/test1.jpg。 该 图片仍然可以从网址访问。
问题
但是,根据我提到的答案和其他一些类似的链接,我希望这些图像无法从上面 2) 中的 url 访问,因为这些图像现在实际上应该在我们创建的 storage/app/public 中指向public/storage 的符号链接。 (storage 目录中的文件不应该公开访问吗?)
这让我想到了两个问题,
- 为什么即使在我创建了从
public/storage到storage/app/public的符号链接并将图像存储在public/storage目录中之后,仍然可以从URL 访问图像? - 就像我的情况一样,如果
public/storage仍然可以通过网络访问 url,实际创建符号链接有什么好处? 它似乎没有提供更多的安全性,因为文件是 仍然可以从 url 访问。
如果有人能帮助我理解上述两个问题的答案,那将非常有帮助。谢谢。
【问题讨论】:
标签: laravel laravel-8 laravel-artisan laravel-storage laravel-filesystem