Laravel应用存储图像无法加载并重定向到404



我在共享主机服务器上托管了laravel应用程序。 在服务器上有2个文件夹:

  • 1) Laravelapp -> 包含 (app,config,database,vendor...等文件夹)

  • 2)public_html->包含(css,js,images,storage文件夹)

我使用以下代码上传图像:

if($request->hasFile('file')){
$filenameWithExt=$request->file('file')->getClientOriginalName();
$filename=pathinfo($filenameWithExt,PATHINFO_FILENAME);
$extension=$request->file('file')->getClientOriginalExtension();
$fileNameToStore=str_slug($filename,'_').'_'.time().'.'.$extension;
request()->file->move(public_path('storage/profile'), $fileNameToStore);
$image="/storage/profile/".$fileNameToStore;
}

已成功将文件上传到laravelapp/public/storage/profile文件夹

我已经创建了符号链接以laravelapp/public/storagepublic_html/storage

在数据库中:图像路径保存为/storage/profile/user1.png

在刀片模板中,我使用:<img src="{{$img}}" />

但是图像网址:

www.mydomain.com/storage/profile/user1.png 重定向至404页面和图像不显示。

任何人请帮我解决问题。

这在共享主机服务器上对我有用:

编辑config/filesystems.php并像这样修改public部分

'public' => [
'driver' => 'local',
'root' => storage_path(),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
]

请注意,storage_path() 不接受任何参数。现在storagepublic目录中删除文件夹(如果已经存在),然后执行以下操作:

php artisan storage:link

因此,根据我们在评论中的讨论和Laravel 5.5文档,您的可公开访问的文件应放在目录storage/app/public要使它们可从 Web 访问,您应该创建一个从public/storagestorage/app/public.的符号链接

ln -s /path/to/laravel/storage/app/public /path/to/laravel/public/storage

现在,您可以使用asset帮助程序在视图中创建文件的 URL:

echo asset('storage/file.txt');

希望这对您和其他用户有所帮助!

1) 将文件存储在 laravelapp/storage/app/public/cover/文件夹中

use IlluminateSupportFacadesStorage;
$path=$request->file('cover_image')->storeAs('public/cover_images',$fileNameToStore);

2)将文件存储在laravelapp/public/cover/文件夹中

$path=request()->cover_image->move(public_path('storage/profile'), $fileNameToStore);

在共享主机服务器中有2个文件夹:

拉拉维拉普和public_html

由于我使用第二种方式上传图像,我已经通过创建从laravelapp/public/storage文件夹到public_html/的符号链接来解决此问题

ln -s /home/username/laravelapp/public/storage  /home/username/public_html/

存储/公用文件夹的符号链接可能是错误的,您可以查看这是否指向正确的文件夹 使用 ls -l 命令检查给定文件是否为符号链接,并查找符号链接指向的文件或目录。

ls -l /usr/bin/python
lrwxrwxrwx 1 root root 9 Apr 16  2020 /usr/bin/python -> python2.7

第一个字符"l"表示该文件是符号链接。"->"符号显示符号链接指向的文件。

rm 命令删除给定的文件和目录。要删除符号链接,请调用 rm 命令,后跟符号链接名称作为参数:

rm symlink_name

创建指向存储公用文件夹的新符号链接

php artisan storage:link

在cPanel或任何活动服务器中,请确保您的存储文件夹和子文件夹具有正确的权限。应该是644, 755 or 777

因为我习惯了使用 xampp 在本地主机上工作

我必须将修复资产网址的参数添加到项目主目录中的 .env 本地主机

ASSET_URL=http://localhost/project_name

我使用存储系统,所以更详细,我使网址像

http://localhost/project_name/public/storage

所以我可以使用<?= asset('custom_directory/images/brand.png'); ?>来获取网址

我还更改了db_host,memchached_host也redis_host本地主机,以确保 xampp 一切正常进行

DB_HOST=localhost
MEMCACHED_HOST=localhost
REDIS_HOST=localhost

只要您使用 xampp,我们就应该尊重 apache 和 mysql 数据库,并给他们 localhost isntead 的 127.0.0.1,因为他们对待它的方式不同

127.0.0.1和本地主机有什么区别

最新更新