>

모든 곳에서 검색을 해왔으며 모든 예제는 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();

  • 답변 # 1

    알았다!

    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);
        }
      );
    });
    
    

  • 이전 wordpress - PHP 함수의 일부로 URL에서 쿼리 문자열 제거
  • 다음 python - 가져온 기능이 작동하지 않습니다