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

如何通过Curl命令以二进制数据形式向LinkedIn上传媒体?

如何用Curl以二进制数据形式向LinkedIn上传媒体文件

要直接传递二进制数据而非文件路径给Curl,你可以利用Curl从**标准输入(stdin)**读取数据的特性,结合Node.js的子进程来传递二进制流,具体调整如下:

核心思路

Curl的--upload-file(或简写-T)参数支持用-作为输入源,代表从标准输入读取数据。我们需要把原来通过文件路径读取的逻辑,改成直接将媒体的二进制数据通过子进程的stdin传递给Curl。

修改后的代码实现

const { spawn } = require('child_process');

// 构建请求头数组(避免shell转义问题)
const headers = [];
headers.push(`Authorization: Bearer ${token}`);
if (fileType === 'video') {
  headers.push('Content-Type: application/octet-stream');
} else if (fileType === 'image') {
  // 图片建议补充对应Content-Type,比如image/jpeg、image/png,根据实际文件类型调整
  headers.push(`Content-Type: ${media.mimeType}`);
}

// 启动curl进程,用-T -指定从stdin读取上传数据
const curlProcess = spawn('curl', [
  '-i',
  '-T', '-', // 关键:从标准输入读取二进制数据
  ...headers.map(h => ['-H', h]).flat(), // 展开请求头参数
  url
]);

// 将媒体二进制数据写入curl的stdin
curlProcess.stdin.write(media.buffer);
curlProcess.stdin.end(); // 结束输入流

// 处理curl的输出
curlProcess.on('error', (error) => {
  console.log(`error: ${error.message}`);
});

curlProcess.stdout.on('data', (data) => {
  // 处理响应内容
  console.log(data.toString());
});

curlProcess.stderr.on('data', (data) => {
  // 处理错误输出
  console.error(data.toString());
});

curlProcess.on('close', (code) => {
  console.log(`curl进程退出,码值:${code}`);
});

关键调整点

  • 用spawn替代exec:exec会将命令作为shell字符串解析,容易出现转义问题,且不适合处理二进制数据流;spawn直接传递参数数组,更安全可靠。
  • 替换上传参数:把--upload-file ${media.filepath}改成-T -,告诉Curl从标准输入读取要上传的二进制数据。
  • 传递二进制数据:通过curlProcess.stdin.write(media.buffer)直接把媒体的二进制缓冲区数据传给Curl,无需依赖本地文件路径。
  • 完善请求头:图片上传建议补充对应的Content-Type(比如image/jpeg),LinkedIn API对媒体类型的识别更准确。

内容的提问来源于stack exchange,提问作者SANDHYA LATHA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:23