为啥我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像?

Posted

技术标签:

【中文标题】为啥我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像?【英文标题】:Why isn't my deployed Laravel 8 application finding images in the storage directory through a symbolic link?为什么我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像? 【发布时间】:2021-11-11 22:06:40 【问题描述】:

我已经在我的 SiteGround 网站上部署了一个 Laravel 8 应用程序,并且一直在尝试使用 php artisan storage:link 在指向 storage/app/public 目录的公共目录中创建一个符号链接,但我得到了错误,symlink( ): Filesystem.php 中没有这样的文件或目录。几天来,我搜索了诸如 *** 之类的东西,试图找到答案。我一遍又一遍地找到的答案是https://***.com/a/30198781/16932312(如果重要,使用 AppServiceProvider.php 方式)。但是,当我更改我的公共路径并将其打印出来以确保它正确时,我仍然得到了错误。

最终,我决定将设置符号链接的代码从 public_path(storage) => storage_path(app/public) 更改为硬编码目录,看看这是否可行,因为问题是显然其中一个目录不存在。我打电话给 php artisan storage:link 和 lo ,结果它工作了!创建了一个符号链接我没有收到错误!

不幸的是,虽然有些东西仍然无法正常工作,但我不知道是因为我改变了符号链接的设置方式还是什么,但是当我调用 Storage::url("imgs/image.jpg")asset("storage/imgs/image.jpg") 时,他们都没有找到图像。如果是关于如何设置符号链接的情况,我该如何解决?因为我的公共路径指向正确的目的地。在我部署它之前它工作得很好,所以我只是不知道是什么导致它停止工作。任何帮助将不胜感激!

我不知道这些是否会有很大帮助,但我打印了一些值来检查:

<p>1)  public_path() </p>
<p>2)  storage_path() </p>
<p>3)  file_exists(public_path("storage")) </p>
<p>4)  file_exists(public_path("storage/imgs")) </p>
<p>5)  file_exists(public_path("storage/imgs/test.jpg")) </p>
<p>6)  file_exists(Storage::url("imgs/test.jpg")) </p>
<p>7)  file_exists(public_path("test")) </p>
<p>8) <img src="public_path('storage/imgs/test.jpg')" ></p>

1 和 2 都打印出正确的路径。 3、4 和 5 打印出 1。6 和 7 不打印任何内容。最后 8 只显示没有图像的 alt,我觉得这很奇怪,因为显然该文件存在。

编辑:我只是稍微看了一下,使用 Storage::url("imgs/test.jpg")asset("storage/imgs/test.jpg") 实际上在我尝试访问它时给了我一个 403 错误。

【问题讨论】:

嘿公园。几个月前,我写了an article 关于文件系统在 Laravel 中的工作原理。它是西班牙语的,但您可以使用 Google 轻松翻译它。希望对你有帮助:) 【参考方案1】:

在#8 中,您在模板中使用了辅助函数,但您不应该需要它,因为/storage 指向正确的位置。你应该能够做到:

<img src="/storage/imgs/test.jpg" >

【讨论】:

是的,你是对的。我认为现在我正在查看的实际问题是我在尝试从该链接中检索它时遇到的 403。我不知道我是否应该把它放在一个新问题中,或者只是把它留在这个问题中。 我认为这可能是一个新问题。它可能是对该文件的访问,尽管我认为那时file_exists() 也会出现。 除非我误解了你的意思,它确实使用 file_exists() 显示,不是吗?看看我做file_exists(public_path("storage/imgs/test.jpg"))时从测试中得到的答案,它出现了。 这就是我的意思。如果您从 获得 403,我很惊讶您可以测试它的存在。我想知道 403 是否有可能从其他地方出现。 如果正确,请将答案标记为正确。 :)

以上是关于为啥我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像?的主要内容,如果未能解决你的问题,请参考以下文章

关于 CORS,为啥我部署的 Azure 应用程序适用于除一个用户之外的所有人?

IIS配置后本地访问正常,但外网无法访问

为啥我部署了项目,也启动了weblogic服务,为啥打开网页依然是该也无法显示?

为啥 xamarin 突然不让我部署到 iOS 设备

Windows 8 问题上的 Work Light 6.0 部署

进程无法访问图像文件,因为它正被另一个进程使用