Node.js调用WordPress API上传WebP图片失败(406错误)求助
WordPress API 上传WebP图片返回406 Not Acceptable错误的解决方法
问题定位
PNG格式可通过API正常上传,WebP格式返回406错误,但后台UI上传WebP无异常,说明WordPress本身支持WebP格式,问题出在API请求的构建逻辑上。
具体解决方案
1. 补充文件名后缀
代码中filename仅设置为"someName",缺少.webp后缀。WordPress可能通过文件名后缀辅助识别文件类型,即使设置了Content-Type,缺失后缀仍可能触发验证失败。
修改代码:
const filename = "someName.webp"
2. 完善请求头信息
部分服务器对请求头格式要求严格,建议添加Content-Length头,明确请求体大小,同时确保Content-Disposition格式规范:
"headers": { 'Content-Disposition': `attachment; filename="${filename}"`, 'Authorization': `Basic ${token}`, 'Content-Type': 'image/webp', 'Content-Length': imageBuffer.length.toString() },
3. 改用FormData格式上传
WordPress后台UI上传文件默认使用multipart/form-data格式,直接传递Buffer可能不符合API预期。尝试用FormData包装文件:
const formData = new FormData(); formData.append('file', imageBuffer, { filename: 'someName.webp', type: 'image/webp' }); const response = await fetch(apiMediaUrl, { method: 'POST', headers: { 'Authorization': `Basic ${token}` // 无需手动设置Content-Type,FormData会自动生成正确的multipart/form-data头 }, body: formData, });
4. 排查服务器配置
- 检查
wp-config.php是否存在限制WebP上传的配置 - 确认是否有插件拦截WebP格式的API请求
- 查看服务器
mod_security规则是否屏蔽了WebP的API上传请求
辅助调试
若修改后仍报错,可打印响应的具体内容,获取服务器返回的详细错误信息:
const responseText = await response.text(); console.log("响应详情:", responseText);
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

