Laravel 5.5+PHP上传图片无法在浏览器显示问题求助
我来帮你排查这个Laravel 5.5里上传图片无法在浏览器显示的问题,这是本地存储配置里常见的几个坑,你可以一步步核对:
补全
filesystems.php的public磁盘配置
你给出的配置里public磁盘的url项不完整,Laravel需要明确public磁盘的访问URL,同时要设置文件可见性为public,完整配置应该是这样:'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ],这里的
url会结合你.env里的APP_URL生成可访问的路径,visibility确保文件能被公开访问。创建storage到public目录的软链接
这是最容易忽略的一步!Laravel的storage/app/public目录不在web根目录下,所以需要通过软链接把它映射到public/storage,这样浏览器才能访问到里面的文件。
在项目根目录执行Artisan命令:php artisan storage:link如果是没有Artisan权限的生产环境(比如共享主机),可以手动创建软链接:
- Linux/macOS:
ln -s /你的项目路径/storage/app/public /你的项目路径/public/storage - Windows(管理员命令行):
mklink /D "C:\你的项目路径\public\storage" "C:\你的项目路径\storage\app\public"
- Linux/macOS:
确认文件上传到了public磁盘
上传文件时要指定使用public磁盘,而不是默认的local磁盘(local磁盘的文件存在storage/app,无法直接被web访问)。比如上传代码应该类似:// 示例:上传文件到public磁盘的images目录 Storage::disk('public')->put('images/avatar.jpg', file_get_contents($request->file('avatar')));对应的访问URL在Blade模板里可以用
{{ asset('storage/images/avatar.jpg') }},直接访问的话就是你的域名/storage/images/avatar.jpg。检查目录权限
确保storage和软链接后的public/storage目录有足够的读写权限,避免服务器因权限问题无法读取文件。执行以下命令设置权限(不要用777,不安全):chmod -R 755 storage/ public/storage/验证
.env里的APP_URL配置
检查.env文件中的APP_URL是否和你的访问域名/地址一致,比如本地开发应该是APP_URL=http://localhost:8000,线上环境要填你的实际域名,否则生成的图片URL会不正确。
内容的提问来源于stack exchange,提问作者Fil

