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

问题描述 投票:0回答:4

我正在尝试在 Laravel 项目中上传和检索图像。它在我的本地服务器上完美运行,但在实时服务器上上传后,它不起作用。

我正在使用 nginx。

我已经尝试过

php artisan storage:link
,但它说

“public/storage”目录已存在

我正在使用这条线在新页面中打开存储的图像。

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

如果我将鼠标放在视图按钮上,它会显示此链接:

my_ip/storage/images/image.png
,我认为这是正确的。

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

php laravel storage laravel-5.6
4个回答
16
投票

href
是正确的,但这不是问题。问题是链接位置处存在该文件。正如您所发现的,它不在那里。

上传时,请确保您上传的不是

public/storage
的真实目录。

在您的本地服务器上,您是否错误地在

public/storage
创建了一个真实目录?

如果您这样做了,您需要知道 laravel 约定是将您的文件存储在应用程序目录中的

storage/app/public
目录中。 您不是自己创建文件夹
public/storage
。 您创建一个符号链接将其链接到那里。这样,由于符号链接,您放入
storage/app/public
的内容也会出现在
public/storage

首先检查您的本地服务器是否遵循上面(以及文档中)概述的 laravel 约定,然后,在上传到您的服务器后,再次尝试

storage:link
命令,并且,只要您在
 处没有真实目录public/storage
不再了,但只是一个链接,希望它可以工作。

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

此外,如果您使用的是 Homestead,请检查此答案。您应该 ssh 进入 Vagrant 并在此处创建存储链接,而不是在主机上创建存储链接。


13
投票

如果您将公共/存储文件夹上传到服务器并收到错误: “public/storage”目录已经存在。

只需使用

删除它即可
rm -R public/storage

然后再次运行命令

php artisan storage:link

3
投票

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

就我而言,我必须将 .env 文件中的 APP_URL 更改为我的网站名称。默认为 http://localhost。一旦我改变它,一切就完美了。


0
投票

我曾经遇到过这个问题,它试图访问我的“localhost:/storage/....”

我注意到它是 localhost 而不是 localhost:8000,只需更改你的环境

来自

APP_URL=http://localhost

APP_URL=http://localhost:8000
© www.soinside.com 2019 - 2024. All rights reserved.