You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:54:14