WordPress 5.8.1版本SVG无法上传 原有MIME配置代码失效原因咨询
WordPress 5.8.1版本SVG上传代码失效原因
- 核心原因是WordPress 5.7及以上版本新增了上传文件真实性校验机制,你原有代码仅注册了SVG对应的MIME类型,没有适配新的校验规则。
- 新增的校验环节会比对文件扩展名和文件实际内容对应的MIME类型,SVG本质是XML格式的文本文件,未做适配的情况下校验环节会将其识别为
text/plain类型,和注册的image/svg+xml类型不匹配,因此会被系统拦截,导致上传失败。
你可以使用以下适配5.7+版本的完整代码实现SVG上传支持:
// 注册SVG的MIME类型 function cc_mime_types($mimes) { $mimes['svg'] = 'image/svg+xml'; return $mimes; } add_filter('upload_mimes', 'cc_mime_types'); // 适配5.7+版本的SVG文件校验逻辑 function fix_svg_upload_validation($data, $file, $filename, $mimes) { $file_type = wp_check_filetype($filename, $mimes); if ($file_type['ext'] === 'svg' && $file_type['type'] === 'image/svg+xml') { $data['ext'] = 'svg'; $data['type'] = 'image/svg+xml'; $data['proper_filename'] = $data['proper_filename'] ?? $filename; } return $data; } add_filter('wp_check_filetype_and_ext', 'fix_svg_upload_validation', 10, 4);
提示:SVG文件存在XML注入、恶意代码嵌入等安全风险,开启上传权限后建议仅开放给可信的管理员用户,必要时可增加SVG内容安全清洗逻辑。
内容的提问来源于stack exchange,提问作者RU NE
相关产品推荐
相关产品推荐

