Как передать поток Multer S3 в другую функцию - PullRequest
0 голосов
/ 11 мая 2019

У меня небольшое приложение Node.js Express, которое использует multer-s3-transform и четкие пакеты вместе с simple-thumbnail пакетом для загрузки изображений и видео в мое ведро S3. Мой код отлично работает для изображений, изображение передается, резко изменяет его размер, а затем продолжает загружать его в мое ведро. Тем не менее, я пытаюсь реализовать загрузку миниатюры видео в мою корзину s3, используя simple-thumbnail, но я не уверен, как передать поток функции genThumbnail этого пакета. В документации говорится, что вы можете передавать потоки туда и обратно, хотели бы знать, как это сделать.

Пакеты, вызывающие озабоченность:
https://github.com/gmenih341/multer-s3
https://github.com/ScottyFillups/simple-thumbnail

const express = require('express');
const app = express();
const aws = require('aws-sdk');
const multerS3 = require('multer-s3');
const sharp = require('sharp');
const ffmpeg = require('ffmpeg-static');
const genThumbnail = require('simple-thumbnail');

let s3 = new aws.S3({});


let upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: MY_BUCKET,
        acl: 'public-read',
        cacheControl: 'max-age=31536000',
        shouldTransform: true,
        contentType: multerS3.AUTO_CONTENT_TYPE,
        transforms: [{
            id: 'original',
            key: function (req, file, cb) {
                let fileName = Date.now().toString();
                cb(null, fileName + '-original')
            },
            transform: function (req, file, cb) {
                if (file.mimetype == 'video/mp4') {
                    //HERE IS THE PROBLEM, first two arguments of genThumbnail can take in a stream.Readable, and stream.Writable
                    cb(null, genThumbnail(null, null, '150x100', { path: ffmpeg.path }))
                } else {
                    //THIS WORKS (WHEN NOT VIDEO)
                    cb(null, sharp().jpeg())
                }

            }
        }]
    })
}); 

app.post('/upload', upload.array('theFile'), (req, res) => {
    //response
});

Мне бы хотелось, чтобы genThumbnail () создал миниатюру и продолжил передачу потока файла, как в рабочем случае изображений с sharp ().

...