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

Node.js调用WordPress REST API上传文件遇401权限错误求助

WordPress REST API媒体上传401权限问题解决方法

错误原因

WordPress的/wp/v2/media REST端点要求请求者具备上传文件的权限(默认仅编辑者及以上角色用户拥有),你的请求未携带有效的身份认证信息,因此返回rest_cannot_create 401错误。

解决方案

方法一:使用Application Passwords(推荐,WordPress 5.6+内置支持)

  1. 创建应用程序密码

    • 登录WordPress后台,进入「用户 > 你的个人资料」页面
    • 找到「应用程序密码」板块,输入应用名称(如「媒体上传工具」)后点击「添加新应用程序密码」
    • 保存生成的密码(格式为xxxx xxxx xxxx xxxx,仅显示一次)
  2. 修改Node.js代码添加认证
    更新你的app.js,在请求中加入Basic Auth认证,并修正FormData的请求头:

    axios = require('axios');
    FormData = require('form-data');
    
    // 替换为你的WordPress用户名和生成的应用程序密码
    const WP_USERNAME = '你的用户名';
    const WP_APP_PASSWORD = '生成的应用程序密码';
    
    socket.on('uploadFile', function (data) {
        var formData = new FormData();
        formData.append("image", data);
        
        // 生成Basic Auth凭证
        const authToken = Buffer.from(`${WP_USERNAME}:${WP_APP_PASSWORD}`).toString('base64');
        
        axios.post('https://fxalion.com/wp-json/wp/v2/media', formData, {
            headers: {
                ...formData.getHeaders(), // 自动生成multipart/form-data的正确头信息(包含boundary)
                'Authorization': `Basic ${authToken}`
            }
        })
        .then(res => console.log('上传成功:', res.data))
        .catch(err => console.error('上传失败:', err.response.data));
    });
    

方法二:使用Basic Auth插件(适配旧版WordPress)

  1. 安装并激活「WP REST API Basic Auth」插件
  2. 在请求头中添加Authorization,使用你的WordPress登录用户名和密码(必须确保站点使用HTTPS,避免密码泄露):
    // 生成认证凭证(替换为你的用户名和密码)
    const authToken = Buffer.from('你的用户名:你的登录密码').toString('base64');
    // 在axios请求的headers中添加 'Authorization': `Basic ${authToken}`
    

方法三:开放匿名上传权限(不推荐,存在安全风险)

如果不需要身份验证(仅测试或特殊场景),可以通过修改主题functions.php开放权限:

add_filter('rest_upload_image', function($caps, $cap, $args, $user){
    if ($cap === 'upload_files') {
        return ['read']; // 允许所有访问站点的用户上传文件
    }
    return $caps;
}, 10, 4);

额外注意事项

  • 前端Socket.IO传输文件时,确保服务器端Socket.IO配置支持二进制数据传输(默认已支持,但如果有自定义配置需检查)
  • 不要手动设置Content-Type: multipart/form-data,使用formData.getHeaders()自动生成,避免缺少boundary导致表单解析失败

内容的提问来源于stack exchange,提问作者peyman jalili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:05:14