【问题标题】:MulterS3 is giving this.client.send is not a function errorMulterS3 给出 this.client.send is not a function 错误
【发布时间】:2022-08-03 01:27:03
【问题描述】:

笔记:在 multer s3 中出现以下错误。这个错误指向 NPM 模块,我真的不明白这个模块的问题。我使用了 upload.single 和 upload.array 方法来检查这个模块的工作。但不工作。

代码:

const bodyParser = require(\'body-parser\');
const cors = require(\'cors\');

const aws = require(\'aws-sdk\');
const multer = require(\'multer\');
const multerS3 = require(\'multer-s3\');

const http = require(\'http\');
const app = express();

app.set(\'port\', 3000);
app.use(
  bodyParser.json({
    limit: \'50mb\'
  })
);
app.use(
  bodyParser.urlencoded({
    limit: \'50mb\',
    extended: true
  })
);
app.use(cors());

aws.config.update({
  accessKeyId: \'\',
  secretAccessKey: \'\'
});

s3 = new aws.S3();

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: \'\',
    acl: \'public-read\',
    contentType: multerS3.AUTO_CONTENT_TYPE,
    metadata: function (req, file, cb) {
      cb(null, {
        fieldName: file.fieldname
      });
    },
    key: function (req, file, cb) {
      let extArray = file.mimetype.split(\'/\');
      let ext = extArray[extArray.length - 1];

      console.log(`ext ->> `, ext, ` file.fieldname ->> `, file.fieldname);

      cb(null, \"test/\" + Date.now().toString() + \'.\' + ext);
    },
    /* limits: {
      fileSize: 1024 * 1024 * 10
    } */
  })
});

(() => {
  server = http.createServer(app).listen(app.get(\'port\'), () => {
    console.debug(`Server started ->> `);
    app.get(\'/test\', (req, res) => {Mul
      res.send(\'Hello\');
    });

    app.post(\'/media\', upload.single(\'media\'), (req, res) => {
      console.log(`req.files ->> `, req.file);
      res.send(\'Thanks for you waiting time\');
    });
  });
})();

错误:

ext ->>  jpeg  file.fieldname ->>  media
TypeError: this.client.send is not a function
    at Upload.__uploadUsingPut (/home/tristate/Jay/Force/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:52:25)
    at Upload.__doConcurrentUpload (/home/tristate/Jay/Force/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:99:39)
    at process._tickCallback (internal/process/next_tick.js:68:7)

用 multer-s3 寻找解决方案。先感谢您。

    标签: node.js rest multer multer-s3


    【解决方案1】:

    你检查过这个问题吗? https://github.com/anacronw/multer-s3/issues/169

    请检查您的 aws-sdk,multer-s3 版本是否兼容

    【讨论】:

      【解决方案2】:

      我有同样的问题。将 Multer.s3 降级到 2x 版本即可解决问题!

      Multer S3 2.x 与 AWS SDK 2.x 和 Multer S3 3.x 与 AWS SDK 3.x 兼容。

      【讨论】:

        【解决方案3】:

        multer-s3 的 3.x.x 版本使用 AWS JavaScript SDK v3。具体来说,它使用来自 @aws-sdk/lib-storage 的 Upload 类,该类又调用模块化 S3Client。 check their github readme

        require('dotenv').config();
        const { S3Client } = require('@aws-sdk/client-s3');
        const multer = require('multer');
        const multerS3 = require('multer-s3');
        const shortId = require('shortid');
        
        let s3 = new S3Client({
          region: 'ca-central-1',
          credentials: {
            accessKeyId: process.env.ACCESS_KEY_AWS,
            secretAccessKey: process.env.ACCESS_SECRET_AWS,
          },
          sslEnabled: false,
          s3ForcePathStyle: true,
          signatureVersion: 'v4',
          apiVersion: '2006-03-01',
          accessKeyId: process.env.AWS_ID_KEY,
          region: process.env.REGION,
        });
        
        exports.upload = multer({
          storage: multerS3({
            s3: s3,
            bucket: process.env.BUCKET_AWS,
            contentType: multerS3.AUTO_CONTENT_TYPE,
            acl: 'public-read',
            metadata: function (req, file, cb) {
              cb(null, { fieldName: file.fieldname });
            },
            key: function (req, file, cb) {
              cb(null, shortId.generate() + '-' + file.originalname);
            },
          }),
        });
        

        【讨论】:

          猜你喜欢
          • 2021-05-31
          • 2015-05-04
          • 2018-07-23
          • 1970-01-01
          • 2021-03-07
          • 2022-01-01
          • 2015-11-01
          • 2017-03-31
          • 1970-01-01
          相关资源
          最近更新 更多