类型“S3”缺少类型“S3Client”中的以下属性:destroy、middlewareStack、sendts(2739)

sau*_*ode 3 amazon-s3 amazon-web-services node.js multer multer-s3

我在使用 typescript 处理节点后端时遇到此错误,这是将文件上传到 aws S3 的功能。我刚开始使用打字稿,所以任何人都可以帮助我。

import AWS from "aws-sdk";
import multer from "multer";
import multerS3 from "multer-s3";

let S3 = new AWS.S3({
    accessKeyId: process.env.AWS_KEY,
    secretAccessKey: process.env.AWS_SECRET
})

const upload = multer({
    storage: multerS3({
        s3:S3, //error here
        bucket: 'bucket-name',
        metadata: function (req, file, cb) {
            cb(null, { fieldName: file.fieldname });
        },
        key: function (req, file, cb) {
            cb(null, Date.now().toString())
        }
    })
})


export { upload }
Run Code Online (Sandbox Code Playgroud)

nic*_*ick 9

所以问题是您正在使用 sdk 版本 2 而不是 v3 sdk 创建 s3 客户端(@aws-sdk/client-s3)。提供aws-sdk版本2客户端。@aws-sdk/client-s3是 V3 javascript SDK 的一部分。

确保安装npm i @aws-sdk/client-s3.

您可以在此处阅读有关客户端 s3 sdk 的信息

import AWS from "aws-sdk";
import { S3Client } from '@aws-sdk/client-s3';
import multer from "multer";
import multerS3 from "multer-s3";

const s3Config = new S3Client({
   region: 'us-west-1',
   credentials:{
      accessKeyId:'',
      secretAccessKey:''
  }
})

const upload = multer({
    storage: multerS3({
        s3: s3Config,
        bucket: 'bucket-name',
        metadata: function (req, file, cb) {
            cb(null, { fieldName: file.fieldname });
        },
        key: function (req, file, cb) {
            cb(null, Date.now().toString())
        }
    })
})


export { upload }
Run Code Online (Sandbox Code Playgroud)