如何在Node.js中发送带文件附件的HTTP请求至AWS Lambda端点
Node.js上传本地图片到AWS API Gateway Lambda最简实现
最简方案采用form-data处理文件表单,搭配node-fetch发送请求,无需复杂配置,代码量最少。
1. 安装依赖
npm install form-data node-fetch@2
注:选择node-fetch@2是因为v3版本仅支持ESM模块,v2兼容CommonJS格式,适配绝大多数Node.js项目环境,如果你用ESM项目可以直接安装最新版node-fetch。
额外提示:如果Node.js无法识别~开头的用户目录路径,可以用系统模块拼接绝对路径:const path = require('path'); const os = require('os'); const IMAGE_PATH = path.join(os.homedir(), 'User/Images/photo.jpg');
2. 核心代码实现
const fs = require('fs'); const FormData = require('form-data'); const fetch = require('node-fetch'); // 本地图片路径 const IMAGE_PATH = '~/Users/User/Images/photo.jpg'; // 替换为你的API Gateway端点地址 const API_ENDPOINT = 'https://你的API ID.execute-api.区域.amazonaws.com/阶段/路径'; async function uploadImage() { // 构造表单对象 const form = new FormData(); // 把图片文件添加到表单,第二个参数可自定义文件字段名 form.append('photo', fs.createReadStream(IMAGE_PATH)); // 发送POST请求 const response = await fetch(API_ENDPOINT, { method: 'POST', body: form, // form-data会自动生成带boundary的Content-Type头,不需要手动设置 headers: form.getHeaders() }); // 打印返回结果 const result = await response.text(); console.log('请求返回:', result); } uploadImage().catch(console.error);
3. AWS侧配置注意事项
- API Gateway需要开启
multipart/form-data类型的二进制支持,否则Lambda收到的文件内容会被转义无法正常解析 - 如果你用的是Lambda代理集成,文件内容会以Base64编码格式存在
event.body字段中,直接解码即可拿到原始图片二进制数据 - 你提供的现有Lambda代码已经可以打印收到的完整请求内容,测试阶段可以直接在CloudWatch中查看请求结构
内容的提问来源于stack exchange,提问作者alphanumeric
相关产品推荐
相关产品推荐

