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

Node.js使用Request发送二进制数据上传WordPress图片异常问题

解决Node.js Request库上传WordPress REST API图片异常的问题

我之前踩过完全一样的坑!你看到的17字节的@hh.jpg文件,说明你的Node.js代码根本没把图片的二进制数据传上去,反而把@hh.jpg这个字符串当成了文件内容发送给WordPress了——这和Curl的行为不一样,Curl会自动识别@前缀来读取本地文件,但Request库不吃这一套。

问题根源

Curl的-F "file=@hh.jpg"语法会自动解析@后面的路径,读取文件的二进制流并上传;但在Node.js的Request库中,如果你直接在formData里写file: '@hh.jpg',它只会把这个字符串作为表单字段的值发送,WordPress收到后就把这个字符串保存成了文件,所以才会出现17字节的异常文件。

正确的实现方式

你需要用Node.js的fs模块读取文件的流(或Buffer),并在formData中显式配置文件信息。下面是修正后的代码:

const request = require('request');
const fs = require('fs');

// 配置请求参数
const uploadOptions = {
  url: 'https://你的WordPress站点域名/wp-json/wp/v2/media',
  headers: {
    // 替换成你的授权令牌(需要有上传媒体的权限)
    'Authorization': 'Bearer YOUR_JWT_TOKEN',
    // 可选,但建议指定正确的MIME类型
    'Content-Type': 'image/jpeg'
  },
  formData: {
    file: {
      // 用fs.createReadStream读取本地文件流(大文件推荐用流)
      value: fs.createReadStream('./hh.jpg'),
      options: {
        filename: 'hh.jpg', // 上传到WordPress后的文件名
        contentType: 'image/jpeg' // 对应文件的MIME类型
      }
    }
  }
};

// 发送POST请求
request.post(uploadOptions, (error, response, body) => {
  if (error) {
    console.error('上传失败:', error);
    return;
  }
  // 解析并打印WordPress返回的响应
  console.log('上传成功:', JSON.parse(body));
});

额外注意事项

  • 如果你的图片是PNG格式,记得把contentType改成image/png;
  • 确保你的JWT令牌或Basic Auth凭证拥有upload_files权限;
  • 如果是小文件,也可以用fs.readFileSync('./hh.jpg')获取Buffer来代替流,但大文件用流更节省内存;
  • 检查文件路径是否正确,避免因路径错误导致读取不到文件,最终还是传空内容。

这样修改后,WordPress就能正确接收图片的二进制数据,生成正常的图片文件了。

内容的提问来源于stack exchange,提问作者Atul Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:32