簡體   English   中英

如何通過管道傳遞到作為緩沖區而非文件的Node.js流?

[英]How to pipe to a Node.js stream that's a buffer, not a file?

我到處都在搜索,所有示例都導致了fs.createWriteStream ,這不是我想要的。

我使用的是archiver包,並且想使用archive.pipe()傳遞到不是文件的可寫流,而是一個可用於發送到s3.putObject以寫入S3存儲桶。 如何設置可以通過管道傳輸的緩沖區?

當我運行下面的代碼時,出現“錯誤:未實現”。

const stream = require('stream');
const archiver = require('archiver');

const archive = archiver('zip');
const outputStream = new stream.Writable();
outputStream.on('close', () => {
  console.log('done');
});
outputStream.on('error', err => {
  console.error(err);
});
archive.pipe(outputStream);
archive.append('Testing 1 2 3', { name: 'file1.txt' });
archive.finalize();

得到它了!

const bl = require('bl');
const AWS = require('aws-sdk');
const archiver = require('archiver');

const s3 = new AWS.S3();
const archive = archiver('zip');
let buf;

archive.pipe(
  bl((err, data) => {
    buf = data;
  })
);
archive.file('whoa.wav', { name: 'file1.wav' });
archive.finalize().then(x => {
  console.log('finalized', buf);
  s3.putObject(
    {
      Bucket: 'xyz',
      Key: 'whatever.zip',
      Body: buf,
    },
    err => {
      console.log('s3 result:', err);
    }
  );
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM