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

如何将该curl命令转换为Node.js中Axios的POST请求

问题解答

1. readFileSync读取文件的问题

你的代码存在两个明确问题:

  • 变量名不匹配:定义的文件路径变量是filePath,但读取时使用了未定义的file变量,会触发ReferenceError。
  • 二进制文件读取方式错误:MP4属于二进制文件,默认readFileSync会以utf-8编码读取,这会直接破坏文件内容。需要指定encoding: null来获取原始的Buffer数据。

修正后的代码:

const fs = require('fs');
const filePath = __dirname + "/video/Video.mp4";
const fileData = fs.readFileSync(filePath, { encoding: null }); // 返回原始二进制Buffer

2. Axios POST请求示例

根据你提供的curl命令,目标接口要求application/x-www-form-urlencoded格式的请求体,但二进制文件用该格式传输容易出现兼容性问题。下面提供两种实现方案,优先推荐更适合文件上传的multipart/form-data格式:

方式1:匹配curl的x-www-form-urlencoded格式

需要借助qs库编码表单数据(先执行npm install qs axios安装依赖):

const axios = require('axios');
const qs = require('qs');
const fs = require('fs');

const filePath = __dirname + "/video/Video.mp4";
const fileData = fs.readFileSync(filePath, { encoding: null });

axios.post('https://example.com/upload', qs.stringify({
  api_key: 'YOUR_API_KEY',
  file: fileData.toString('base64') // 将二进制Buffer转为base64编码传输
}), {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})
.then(response => {
  console.log('上传成功:', response.data);
})
.catch(error => {
  console.error('上传失败:', error.response?.data || error.message);
});

方式2:推荐的multipart/form-data格式(更适合文件上传)

多数文件上传接口都支持该格式,能避免二进制数据编码问题,且用流读取文件更节省内存:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const filePath = __dirname + "/video/Video.mp4";
const form = new FormData();

form.append('api_key', 'YOUR_API_KEY');
form.append('file', fs.createReadStream(filePath)); // 以流的方式读取文件

axios.post('https://example.com/upload', form, {
  headers: form.getHeaders() // 自动生成正确的Content-Type及边界符
})
.then(response => {
  console.log('上传成功:', response.data);
})
.catch(error => {
  console.error('上传失败:', error.response?.data || error.message);
});

注意:请替换YOUR_API_KEY为你的实际密钥,同时确认接口接收文件的字段名(需与官方文档要求一致)。

内容的提问来源于stack exchange,提问作者Tac Revol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:05:18