我正在尝试在 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
,我认为这是正确的。
但是,单击链接会重定向到主页。
href
是正确的,但这不是问题。问题是链接位置处存在该文件。正如您所发现的,它不在那里。
上传时,请确保您上传的不是
public/storage
的真实目录。
在您的本地服务器上,您是否错误地在
public/storage
创建了一个真实目录?
如果您这样做了,您需要知道 laravel 约定是将您的文件存储在应用程序目录中的
storage/app/public
目录中。
您不是自己创建文件夹 public/storage
。
您创建一个符号链接将其链接到那里。这样,由于符号链接,您放入 storage/app/public
的内容也会出现在 public/storage
。
首先检查您的本地服务器是否遵循上面(以及文档中)概述的 laravel 约定,然后,在上传到您的服务器后,再次尝试
storage:link
命令,并且,只要您在 处没有真实目录public/storage
不再了,但只是一个链接,希望它可以工作。
请注意,我在这里所做的是解释您收到的有关该目录已存在的错误消息。
此外,如果您使用的是 Homestead,请检查此答案。您应该 ssh 进入 Vagrant 并在此处创建存储链接,而不是在主机上创建存储链接。
如果您将公共/存储文件夹上传到服务器并收到错误: “public/storage”目录已经存在。
只需使用
删除它即可rm -R public/storage
然后再次运行命令
php artisan storage:link
如果您仍然困惑于这个问题,这对我有用:
就我而言,我必须将 .env 文件中的 APP_URL 更改为我的网站名称。默认为 http://localhost。一旦我改变它,一切就完美了。
我曾经遇到过这个问题,它试图访问我的“localhost:/storage/....”
我注意到它是 localhost 而不是 localhost:8000,只需更改你的环境
来自
APP_URL=http://localhost
到
APP_URL=http://localhost:8000