Как сохранить файл с S3 с помощью aws-sdk v3

С новым aws-sdk v3, а именно @aws-sdk/client-s3, мне непонятно, как сохранять файлы на диск с S3.
Имея следующий код

const { Body } = await s3.send(new GetObjectCommand({
  Bucket: 'myBucket',
  Key: 'myKey',
}))

Body может иметь тип Readable | ReadableStream | Blob.
Я хочу сохранить это в файл на диске. Поскольку типы возвращаемых значений совершенно разные, есть ли простой способ, например. получить Buffer или Stream.Readable от aws-sdk?

В aws-sdk v2 это было легко с функцией .createReadStream(), которой, похоже, больше не существует.


person mike    schedule 18.03.2021    source источник
comment
Проверьте эту проблему github.com/aws/aws-sdk -js-v3/issues/1096#issuecomment-620900466   -  person Alex Po    schedule 18.03.2021


Ответы (1)


Похоже, что ReadableStream | Blog доступно только в браузере . Node.js всегда получает Readable, что мне и нужно.

После этого решение довольно простое с fs.createWriteStream и конвейером Readable, например

await new Promise((resolve, reject) => {
  Body.pipe(fs.createWriteStream(filePath))
    .on('error', err => reject(err))
    .on('close', () => resolve())
})

Для справки, вот проблема, в которой обсуждается улучшение документации https://github.com/aws/aws-sdk-js-v3/issues/1877

person mike    schedule 18.03.2021