Laravel 上传到服务器后无法访问存储在存储文件夹中的图像

Laravel Cannot Access Image Stored in Storage Folder after Uploading in Server

我正在尝试上传和检索我的 Laravel 项目中的图像。它在我的本地服务器上运行良好,但在实时服务器上载后,它无法运行。

我正在使用 nginx。

我试过 php artisan storage:link 但它说

The "public/storage" directory already exists

我正在使用此行在新页面中打开存储的图像。

<a href="{{ url('/storage/images/'.$file->file_name) }}" title="">View</a>

如果我将鼠标放在视图按钮上,它会显示 link: my_ip/storage/images/image.png 我认为是正确的。

但是,单击 link 会重定向到主页。

href 是正确的,但这不是问题所在。问题是文件存在于 link 的位置。它不在那里,正如您所发现的那样。

上传时,请确保您上传的不是 public/storage 的真实目录。

在您的本地服务器上,您是否错误地在 public/storage 处创建了一个真实目录?

如果这样做,您需要知道 laravel 约定是将您的文件存储在应用程序目录的 storage/app/public 目录中。 您不会自己创建文件夹 public/storage。 您创建一个 symlink 到 link 到那里。这样,由于 symlink,您放入 storage/app/public 的内容也会出现在 public/storage.

首先检查您的本地服务器是否遵循上面概述的 laravel 约定(以及在文档中),然后,在上传到您的服务器后,再次尝试 storage:link 命令,并且,只要你在 public/storage 不再有真正的目录,只有一个 link,它应该可以工作。

请注意,我在这里所做的是解释您收到的有关该目录已存在的错误消息。

此外,如果您使用的是 Homestead,请勾选 。不要在主机上创建存储 link,您应该通过 ssh 进入 Vagrant 并在此处创建存储 link。

如果您已将 public/storage 文件夹上传到服务器并出现错误: "public/storage" 目录已经存在。

删除即可
rm -R public/storage

和运行再次命令

php artisan storage:link

如果您仍然对这个问题感到困惑,这对我有用:

在我的例子中,我不得不将 .env 文件中的 APP_URL 更改为我的站点名称。它默认为 http://localhost。一旦我改变它,一切都完美无缺。