Отправить S3-файлы в виде .zip в качестве ответа в Express.js - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь отправить zip-файл с определенными элементами в моем основном хранилище amazon S3 с ответом на HTTP-запрос. Так как я довольно новичок в express.js и не вижу какого-либо конкретного способа сделать это вручную, я использую s3-zip, в котором нет конкретных инструкций о том, как отправить файл в ответе, а выводится его в каталоге:

const output = fs.createWriteStream(join(__dirname, 'use-s3-zip.zip'))

s3Zip
  .archive({ region: region, bucket: bucket}, folder, [file1, file2, file3, file4])
  .pipe(output)

Вот моя небольшая адаптация к коду:

app.get('/files', (request, response) => {
  const objectIds = request.body.objectIds
  const folder = request.body.folder

  response.set('content-type', 'application/zip')

  s3Zip
    .archive({ s3: s3, bucket: aws_bucket_name }, folder, objectIds)
    .pipe(response)

  s3Zip.on('end', () => {
    console.log('ended');
    response.end();
  })
});

Однако s3Zip.on не определен.

Кто-нибудь 1) использовал эту зависимость раньше и мог указать на то, как заставить ее работать, или 2) есть другая идея для достижения моей цели?

Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Вам не нужно использовать: response.end(), .pipe позаботится об этом.

s3Zip не имеет метода .on, но поток создан s3Zip.archive

app.get('/files', (request, response) => {
  const objectIds = request.body.objectIds
  const folder = request.body.folder

  response.set('content-type', 'application/zip')

  s3Zip
    .archive({ s3: s3, bucket: aws_bucket_name }, folder, objectIds)
    .pipe(response)

});

или

app.get('/files', (request, response) => {
  const objectIds = request.body.objectIds
  const folder = request.body.folder

  response.set('content-type', 'application/zip')

  const archive = s3Zip
    .archive({ s3: s3, bucket: aws_bucket_name }, folder, objectIds)


  archive.on('error', (e) => {
     res.status(500).send(e.message);
  });

  archive.on('end', () => {
     console.log('archive created');
  });

  archive.pipe(response);

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...