Laravel UniSharp文件管理器开启缩略图报Invalid upload request错误
UniSharp laravel-filemanager 开启缩略图时上传报Invalid upload request修复方案
问题现象
- 视图层通过iframe嵌入文件管理器,嵌入代码:
<iframe src="/laravel-filemanager?type=Images" style="width: 100%; height: 500px; overflow: hidden; border: none;"></iframe>
- 原
config/lfm.php中folder_categories配置:
'folder_categories' => [ 'file' => [ 'folder_name' => 'files', 'startup_view' => 'list', 'max_size' => 50000, // size in KB 'thumb' => true, 'thumb_width' => 80, 'thumb_height' => 80, 'valid_mime' => [ 'image/txt', 'image/pdf', ], ], 'image' => [ 'folder_name' => 'photos', 'startup_view' => 'grid', 'max_size' => 50000, // size in KB 'thumb' => true, 'thumb_width' => 80, 'thumb_height' => 80, 'valid_mime' => [ 'image/jpeg', 'image/pjpeg', 'image/png', 'image/gif', 'image/jpg', 'image/svg', ], ], ],
- 触发规律:配置项
should_create_thumbnails设为true时,所有文件上传直接返回Invalid upload request错误;设为false时文件可正常上传,但无法自动生成缩略图。 - 伴随报错:开启缩略图开关时页面顶部固定提示
Please install gd or imagick extension to crop, resize, and make thumbnails of images.,本地实际已安装GD扩展;错误日志可查到mb_detect_encoding传参为空、deprecations日志通道未定义两类报错。
问题根因
- MIME类型配置错误:原配置中
file分类下txt、pdf的MIME值填写错误,svg的MIME值格式不正确,导致文件校验逻辑异常。 - PHP扩展加载不完整:虽然安装了GD扩展,但mbstring、fileinfo扩展未在Web运行模式下同步加载,触发扩展检测误报,
mb_detect_encoding空参数报错就是mbstring扩展运行异常的直接表现。 - 日志通道缺失:当前Laravel版本默认移除了
deprecations日志通道定义,缩略图生成过程中抛出的废弃级别日志找不到对应写入通道,触发未捕获异常,最终返回通用的Invalid upload request响应。 - 格式兼容问题:GD库原生不支持SVG格式处理,开启缩略图功能时上传SVG会直接触发图像处理失败。
修复步骤
按以下顺序操作,可在保留缩略图生成功能的前提下解决上传报错:
- 校验PHP扩展加载状态
确认CLI和Web运行模式(FPM/Apache模块)下都同时加载了gd、mbstring、fileinfo三个扩展,命令行执行以下命令验证CLI端扩展:
Windows环境可直接打开php -m | grep -E 'gd|mbstring|fileinfo'php.ini,确认以下三行配置前无分号注释:
修改完成后重启Web服务,刷新文件管理器页面,确认顶部的GD扩展缺失提示消失。extension=gd extension=mbstring extension=fileinfo - 补全缺失的日志通道
打开config/logging.php,在channels数组中添加deprecations通道配置:'deprecations' => [ 'driver' => 'single', 'path' => storage_path('logs/deprecations.log'), 'level' => 'warning', ], - 修正lfm配置错误
- 修正
folder_categories下的错误MIME类型,非图片类文件关闭缩略图生成避免触发图像处理错误,修正后参考配置:
'folder_categories' => [ 'file' => [ 'folder_name' => 'files', 'startup_view' => 'list', 'max_size' => 50000, 'thumb' => false, 'thumb_width' => 80, 'thumb_height' => 80, 'valid_mime' => [ 'text/plain', 'application/pdf', ], ], 'image' => [ 'folder_name' => 'photos', 'startup_view' => 'grid', 'max_size' => 50000, 'thumb' => true, 'thumb_width' => 80, 'thumb_height' => 80, 'valid_mime' => [ 'image/jpeg', 'image/pjpeg', 'image/png', 'image/gif', 'image/jpg', 'image/svg+xml', ], ], ],- 确认
should_create_thumbnails配置项值为true,找到create_thumbnails_by_mime配置项,将GD库不支持的SVG格式排除在缩略图生成范围外:
'create_thumbnails_by_mime' => [ 'image/jpeg', 'image/pjpeg', 'image/png', 'image/gif', 'image/jpg', ], - 修正
- 清除配置缓存
执行以下Artisan命令清除缓存的旧配置:php artisan config:clear php artisan cache:clear - 校验目录权限
确认storage目录、public/storage目录具备Web运行用户的可写权限,Linux/macOS环境可执行以下命令赋权:chmod -R 755 storage chmod -R 755 public/storage
验证结果
完成以上操作后刷新文件管理器页面,上传jpg/png/gif格式图片可正常完成上传,同时自动生成对应尺寸的缩略图,不会再返回Invalid upload request错误。
内容的提问来源于stack exchange,提问作者Sead Silajdzic
相关产品推荐
相关产品推荐

