使用AWS SDK V2与Multer S3 V3上传至S3时遇this.client.send不是函数错误
解决AWS SDK V2搭配multer-s3 V3上传S3时的
TypeError: this.client.send is not a function错误 问题根源
multer-s3 v3版本是为AWS SDK for JavaScript v3设计的,它依赖v3客户端的send方法实现上传逻辑。但你传入了AWS SDK v2的S3客户端,两者API不兼容,导致触发该错误。
解决方案
方案1:切换到AWS SDK v3的S3客户端
适配multer-s3 v3的要求,使用v3版本的S3客户端:
- 安装所需依赖:
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage multer-s3
- 示例代码:
const { S3Client } = require("@aws-sdk/client-s3"); const multer = require('multer'); const multerS3 = require('multer-s3'); // 初始化AWS SDK v3的S3客户端 const s3Client = new S3Client({ region: '你的区域ID', credentials: { accessKeyId: '你的访问密钥', secretAccessKey: '你的密钥密码' } }); // 配置multer-s3上传规则 const upload = multer({ storage: multerS3({ s3: s3Client, // 传入v3客户端实例 bucket: '你的存储桶名称', key: (req, file, cb) => { // 自定义文件存储路径/名称 cb(null, `${Date.now()}-${file.originalname}`); } }) }); // 接口使用示例 app.post('/upload', upload.single('file'), (req, res) => { res.send('文件上传完成'); });
方案2:降级multer-s3到兼容AWS SDK v2的版本
如果需要继续使用AWS SDK v2,将multer-s3降级到v2.x系列(该版本兼容v2客户端):
- 卸载当前multer-s3 v3:
npm uninstall multer-s3
- 安装兼容版本:
npm install multer-s3@2
- 示例代码:
const AWS = require('aws-sdk'); const multer = require('multer'); const multerS3 = require('multer-s3'); // 初始化AWS SDK v2的S3客户端 const s3 = new AWS.S3({ region: '你的区域ID', accessKeyId: '你的访问密钥', secretAccessKey: '你的密钥密码' }); // 配置multer-s3上传规则 const upload = multer({ storage: multerS3({ s3: s3, // 传入v2客户端实例 bucket: '你的存储桶名称', key: (req, file, cb) => { cb(null, `${Date.now()}-${file.originalname}`); } }) }); // 接口使用示例 app.post('/upload', upload.single('file'), (req, res) => { res.send('文件上传完成'); });
注意事项
- 不要混合使用AWS SDK v2和v3的客户端,两者API差异较大,容易引发兼容问题
- 若使用环境变量配置AWS凭证(
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY),客户端会自动读取,无需手动传入credentials参数
内容的提问来源于stack exchange,提问作者Aflah Najeeb
相关产品推荐
相关产品推荐

