Как createReadStream () работает в aws-sdk? - PullRequest
0 голосов
/ 27 марта 2019

Я бы хотел использовать s3.getObject(params).createReadStream().pipe(writableStream) для прямой записи в fs объекта из s3 (цель состоит в том, чтобы уменьшить использование ОЗУ). Меня действительно беспокоит цена, я понятия не имею, как она работает, и я хочу избежать множественных вызовов GET против s3, которые могут быть дорогими.

Я предполагаю, что HTTP-запросы уже работают аналогично потокам, использующим пакет необработанных данных, а aws-sdk просто оборачивает их в поток узлов. Но другой возможностью было бы последовательно запрашивать части объекта и, следовательно, использовать несколько вызовов GET.

Мои поиски не увенчались успехом, у вас есть идея?

1 Ответ

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

Использование потоков не влияет на цену, оно просто меняет способ обработки поступающих данных.

const s3 = new AWS.S3();
const source = s3.getObject({ Key: 'key', Bucket: 'bucket-name' }).createReadStream();
const target = fs.createWriteStream('/your/local/path/to/store/the/object');
source.pipe(target).on('end', () => {
  console.log('Object stored...')
  // Custom code here...
})
.on('error', err => {
  console.log('Something went wrong...')
  // Custom code here...
})

Надеюсь, это поможет ...

...