处理多个流

问题描述

我正在尝试使用流/流化器来处理流,但无论我尝试什么,我似乎都无法通过多个流处理程序来处理管道。我认为部分原因是我使用的两个组件(s3 和音乐元数据)似乎以不同的方式处理流。

所以目前,我不得不通过复制流对象并一个一个地运行它们来解决这个问题。我确定必须有更好的方法来做到这一点,使用 .pipe() 将其向前传递,或其他一些机制?

这是我目前所拥有的:

const AWS = require('aws-sdk');
const s3 = new AWS.S3( ... );
const express = require('express');
const fileUpload = require('express-fileupload');
const stream = require('stream');
const streamifier = require('streamifier');
const mm = require('music-Metadata');

const app = express();
app.use(
    fileUpload({
        limits: { fileSize: 50 * 1024 * 1024 },})
);

const s3upload = ({ Bucket,Key }) => {
    const pass = new stream.Passthrough();
    return {
        s3uploadStream: pass,promise: s3.upload({ Bucket,Key,Body: pass }).promise(),};
};

app.post('/',async function (req,res) {
    const fileStream1 = streamifier.createReadStream(req.files.file.data);
    const fileStream2 = streamifier.createReadStream(req.files.file.data); // want to lose this
    const { s3uploadStream,promise } = s3upload({ Bucket: 'mybucket',Key: req.files.file.name });
    let Meta = await mm.parseStream(fileStream1);
    let resp = fileStream2.pipe(s3uploadStream);
    await promise;
    res.status(200).send(Meta);
});

app.listen(3000);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)