从 public/storage 到 storage/app/public 的符号 link 仍然使存储目录中的文件可以从网络访问
Symbolic link from public/storage to storage/app/public still makes the files in the storage directory accessible from the web
我做了什么
当我研究在 laravel 中存储文件时。我遇到了两种方法。
- 将资产直接存储在 public 文件夹中。
- 正在创建符号 link 从
public/storage
到
storage/app/public
当我研究哪一个两个使用时,我遇到了这个堆栈溢出 link。
在这个 link 的最佳答案中提到,
Public folder means files will be publicly accessible.
For example an image stored in
public/images/my-image.jpeg
can be viewed by anyone by
going to mysite.com/images/my-image.jpeg
However, files stored in storage directory are only available to your
app.
因为,包括上面提到的堆栈溢出 post,以及我在不同平台上阅读的许多其他 posts 暗示 public
目录中的文件是网络文件可访问而 storage
目录中的文件不可访问,我尝试通过将文件同时存储在 public
目录和 storage
目录中来测试这一点,一次一个,然后检查是否这些文件可通过网络访问 url。
我的尝试如下,
- 首先我在 public 中添加了路径
images/
目录并放置一些图像(让我们说
test1.jpg
、test2.jpg
和
test3.jpg
) 到那个目录。然后在我的 blade
我的 src
属性的模板
img
个标签,我将它们称为
URL('images/test1.jpg')
等......他们确实是
呈现在网页上。然后我也尝试访问图像
url 通过去
http://localhost:8000/images/test.jpg
。结果是
正如预期的那样,图像在网页上呈现 + 它们是
可从 url
- 然后我运行命令
php artisan storage:link
在控制台上,根据我阅读的文章,应该
在目录之间创建一个 symbolic link
public/storage
和 storage/app/public
。
一旦我 运行 命令,我就会得到一个名为
storage
创建于 public
目录。然后我把我所有的图片都移到那个
public/storage
目录。然后设置
src
将我的 img
标签归为
URL('storage/test1.img')
等等...图像是
呈现在网页上。然后我试着检查图像是否
仍然可以从 url 访问。为此,我去了 url 酒吧
http://localhost:8000/storage/test1.jpg
。
图片仍然可以从 url. 访问
问题
但是,根据我提到的答案和其他一些类似的 links,我预计这些图像无法从上面 2) 中的 url 访问,因为图像现在应该实际上在 storage/app/public
中我们创建了一个符号 link 到 public/storage
。 (storage
目录中的文件不应该 public 可以访问,对吗?)
这让我想到了两个问题,
- 为什么即使在我创建了一个从
public/storage
到 storage/app/public
的符号 link 并存储之后,图像仍然可以从 url 访问public/storage
目录中的图像?
- 就像我的情况一样,如果文件在
public/storage
仍然可以通过网络访问
url,实际创建符号link有什么好处?
它似乎没有提供任何更多的安全性,因为文件是
仍然可以从 url. 访问
如果有人能帮助我理解以上两个问题的答案,那将是非常有帮助的。谢谢。
您的情况符合预期。
Laravel 存储的目的是与您的本地文件交互并利用 Laravel 助手,此外还可以在部署之间轻松共享。
说我会避免将您的文件直接移动到您的 public 文件夹。
另一方面,通过将文件添加到您的 storage/app/public
文件夹,您假设这些文件将 public 可以访问,但在您创建符号 link 这是一种指向另一个文件的特殊文件。
当您创建一个符号 link 时,您是在说“嘿,如果用户达到 http://localhost:8000/storage/
,只需显示存储在 storage/app/public
中的文件”
因此,如果您想要私人文件(并且您已经创建了一个符号 link),请不要将它们上传到您的 storage/app/public
文件夹,而不是将您的私人文件从 public文件夹如storage/app/myfiles
他就是你的答案:
1 - Why are the images are still being accessible from the url even
after I created a symbolic link from public/storage to
storage/app/public and stored the images in the public/storage
directory?
因为事实上,您为此目的创建了一个符号 link,使 storage/app/public
public 易于访问。
2 - As happened with my case, if the files in the public/storage are
still accessible through the web url, what are the advantages of
actually creating the symbolic link? It does not seem to offer any
more security since the files are still accessible from the url.
如前所述,优点是可以利用 Laravel 文件系统。 public link 不决定您文件的隐私
您可能在一个项目中有许多不同类型的文件。有些是 public 可以访问的,例如网站中嵌入的图像(如您的示例所示),有些是私人文件,例如私人报告的 pdf 文件。
public 可以访问的任何文件都可以存储在 storage/public 中或直接存储在 public 中。正如您所观察到的,那里没有区别,因为前者会建立一个符号链接。
但是,私有文件无法存储 storage/public(如果建立了符号链接),尤其是不能直接存储在 public 文件夹中,原因很明显。
这些文件可以放入 storage/app/NOT_PUBLIC_REPO。这些文件应该可以通过受保护的路由访问(如果您需要额外的保护,还可以使用签名的路由)。
我做了什么
当我研究在 laravel 中存储文件时。我遇到了两种方法。
- 将资产直接存储在 public 文件夹中。
- 正在创建符号 link 从
public/storage
到storage/app/public
当我研究哪一个两个使用时,我遇到了这个堆栈溢出 link。
Public folder means files will be publicly accessible.
For example an image stored in
public/images/my-image.jpeg
can be viewed by anyone by going tomysite.com/images/my-image.jpeg
However, files stored in storage directory are only available to your app.
因为,包括上面提到的堆栈溢出 post,以及我在不同平台上阅读的许多其他 posts 暗示 public
目录中的文件是网络文件可访问而 storage
目录中的文件不可访问,我尝试通过将文件同时存储在 public
目录和 storage
目录中来测试这一点,一次一个,然后检查是否这些文件可通过网络访问 url。
我的尝试如下,
- 首先我在 public 中添加了路径
images/
目录并放置一些图像(让我们说test1.jpg
、test2.jpg
和test3.jpg
) 到那个目录。然后在我的 blade 我的src
属性的模板img
个标签,我将它们称为URL('images/test1.jpg')
等......他们确实是 呈现在网页上。然后我也尝试访问图像 url 通过去http://localhost:8000/images/test.jpg
。结果是 正如预期的那样,图像在网页上呈现 + 它们是 可从 url - 然后我运行命令
php artisan storage:link
在控制台上,根据我阅读的文章,应该 在目录之间创建一个symbolic link
public/storage
和storage/app/public
。 一旦我 运行 命令,我就会得到一个名为storage
创建于public
目录。然后我把我所有的图片都移到那个public/storage
目录。然后设置src
将我的img
标签归为URL('storage/test1.img')
等等...图像是 呈现在网页上。然后我试着检查图像是否 仍然可以从 url 访问。为此,我去了 url 酒吧http://localhost:8000/storage/test1.jpg
。 图片仍然可以从 url. 访问
问题
但是,根据我提到的答案和其他一些类似的 links,我预计这些图像无法从上面 2) 中的 url 访问,因为图像现在应该实际上在 storage/app/public
中我们创建了一个符号 link 到 public/storage
。 (storage
目录中的文件不应该 public 可以访问,对吗?)
这让我想到了两个问题,
- 为什么即使在我创建了一个从
public/storage
到storage/app/public
的符号 link 并存储之后,图像仍然可以从 url 访问public/storage
目录中的图像? - 就像我的情况一样,如果文件在
public/storage
仍然可以通过网络访问 url,实际创建符号link有什么好处? 它似乎没有提供任何更多的安全性,因为文件是 仍然可以从 url. 访问
如果有人能帮助我理解以上两个问题的答案,那将是非常有帮助的。谢谢。
您的情况符合预期。
Laravel 存储的目的是与您的本地文件交互并利用 Laravel 助手,此外还可以在部署之间轻松共享。 说我会避免将您的文件直接移动到您的 public 文件夹。
另一方面,通过将文件添加到您的 storage/app/public
文件夹,您假设这些文件将 public 可以访问,但在您创建符号 link 这是一种指向另一个文件的特殊文件。
当您创建一个符号 link 时,您是在说“嘿,如果用户达到 http://localhost:8000/storage/
,只需显示存储在 storage/app/public
中的文件”
因此,如果您想要私人文件(并且您已经创建了一个符号 link),请不要将它们上传到您的 storage/app/public
文件夹,而不是将您的私人文件从 public文件夹如storage/app/myfiles
他就是你的答案:
1 - Why are the images are still being accessible from the url even after I created a symbolic link from public/storage to storage/app/public and stored the images in the public/storage directory?
因为事实上,您为此目的创建了一个符号 link,使 storage/app/public
public 易于访问。
2 - As happened with my case, if the files in the public/storage are still accessible through the web url, what are the advantages of actually creating the symbolic link? It does not seem to offer any more security since the files are still accessible from the url.
如前所述,优点是可以利用 Laravel 文件系统。 public link 不决定您文件的隐私
您可能在一个项目中有许多不同类型的文件。有些是 public 可以访问的,例如网站中嵌入的图像(如您的示例所示),有些是私人文件,例如私人报告的 pdf 文件。
public 可以访问的任何文件都可以存储在 storage/public 中或直接存储在 public 中。正如您所观察到的,那里没有区别,因为前者会建立一个符号链接。
但是,私有文件无法存储 storage/public(如果建立了符号链接),尤其是不能直接存储在 public 文件夹中,原因很明显。
这些文件可以放入 storage/app/NOT_PUBLIC_REPO。这些文件应该可以通过受保护的路由访问(如果您需要额外的保护,还可以使用签名的路由)。