0

I'm using multer-s3-transform to resize my image upload beore uploading to S3. Using Sharp for the resize. The transform does work fine, the image is resized and uploaded to S3 bucket, I can see the file in the bucket. However, the uploadToS3.single('profilePic') middleware never continues to next route which is end route.

What am I doing wrong?

exports.uploadToS3 = multer({
    storage: multerS3({
        s3: s3,
        bucket: S3_BUCKET,
        acl: 'public-read',
        contentType: multerS3.AUTO_CONTENT_TYPE,
        fileFilter: allowOnlyImages,
        limits: {
            fileSize: 1024 * 250 // We are allowing only 250K
        },
        shouldTransform: (req, file, cb) => {
            // Is this an image file type?
            cb(null, /^image/i.test(file.mimetype));
        },
        transforms: [{
            id: 'thumbnail',
            key: (req, file, cb) => {
                const fn = `${S3_PROFILE_PICS}/${req.body.handle}/${createFilename(req, file)}`;
                //console.log('transforms key fn: ', fn);
                cb(null, fn);
            },
            transform: (req, file, cb) => {
                //console.log('transform: ', file.originalname);
                // Perform desired transformations
                const width = parseInt(PROFILE_PIC_W);
                const height = parseInt(PROFILE_PIC_H);
                cb(null, sharp()
                    .resize(width, height)
                    .toFormat('jpeg')
                );
            }
        }]
    })
});

Route...

router.post('/register', uploadToS3.single('profilePic'), async (req, res) => {
    ...
    ...
});

It's something about the transform and/or Sharp. If I remove the Sharp transform and just upload the incoming image to S3, everything works fine.

Locohost
  • 1,682
  • 5
  • 25
  • 38

1 Answers1

-1

Try this to see it work:

router.post('/register', uploadToS3.single('profilePic'), async (req, res, next) => {
    ...
    ...
});
HHung
  • 49
  • 5