WooCommerce API上传无后缀图片触发文件类型错误如何解决
WooCommerce API 上传无后缀动态图片报错解决方案
问题描述
调用WooCommerce API上传商品图片时,系统无法识别传入的图片SRC对应文件为JPG格式,传入的图片参数结构示例如下:
["images"]=> array(6) { [0]=> array(2) { ["src"]=> string(112) "https://nz.tradevine.com/BlobStorage/GetFullPhoto?photoID=3783754511503592459&organisationID=3468490059683634443" ["position"]=> string(1) "0" }
接口调用返回如下错误:
Error: Invalid image: Sorry, you are not allowed to upload this file type. [woocommerce_api_product_image_upload_error]
已尝试在wp-config.php中添加配置define('ALLOW_UNFILTERED_UPLOADS', true);放开全类型文件上传限制,但系统仍会尝试上传名为GetFullPhoto的无.jpg后缀文件,上传依旧失败,该功能此前可正常运行。
故障原因
WooCommerce REST API 处理远程图片上传时,会优先从URL路径解析文件后缀判断文件类型,动态接口返回的图片地址无明确文件后缀,会被判定为非法文件类型。
注意:ALLOW_UNFILTERED_UPLOADS配置仅对后台登录态下的手动上传生效,不对REST API的上传校验逻辑生效,因此单独添加该配置无法解决问题。
可行解决方法
- 快速修复:给传入API的图片地址末尾拼接伪后缀
不需要修改源站图片服务,只需要在传入的src参数末尾拼接&.jpg即可,该拼接不会影响原动态接口的图片返回逻辑,同时能让WooCommerce的后缀校验识别到jpg格式,直接绕过拦截。 - 代码层面修复:添加过滤器自定义校验规则
在主题functions.php文件或自定义功能插件中添加如下代码,针对对应来源的动态图片强制指定文件类型与后缀:
add_filter('wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) { // 匹配指定来源的无后缀图片接口 if (strpos($file, 'nz.tradevine.com/BlobStorage/GetFullPhoto') !== false) { $data['ext'] = 'jpg'; $data['type'] = 'image/jpeg'; } return $data; }, 10, 4);
- 彻底规避方案:先本地化图片再上传
调用WooCommerce API前,先通过服务端脚本将远程动态图片下载到本地临时目录,保存为带.jpg后缀的文件后,再将本地可访问的带后缀图片地址传入API,完全绕开远程无后缀文件的校验逻辑。
内容的提问来源于stack exchange,提问作者Jonny B'Good
相关产品推荐
相关产品推荐

