Con el nuevo aws-sdk v3, específicamente @aws-sdk/client-s3 , no tengo claro cómo almacenar archivos en el disco desde S3.
Teniendo el siguiente código
const { Body } = await s3.send(new GetObjectCommand({ Bucket: 'myBucket', Key: 'myKey', })) El Body puede ser de tipo Readable | ReadableStream | Blob
Me gustaría almacenar esto en un archivo en el disco. Dado que los tipos de devolución son completamente diferentes, ¿existe una manera fácil de, por ejemplo, obtener un Buffer o Stream.Readable de aws-sdk?
En aws-sdk v2 fue fácil con la función .createReadStream() que parece que ya no existe.
Aparece ReadableStream | Blob solo está disponible en el navegador . Node.js siempre se vuelve Readable , que es lo que necesito.
La solución es bastante sencilla después con fs.createWriteStream y canalizando el Readable como
await new Promise((resolve, reject) => { Body.pipe(fs.createWriteStream(filePath)) .on('error', err => reject(err)) .on('close', () => resolve()) })Como referencia, aquí hay un problema en el que se analiza la mejora de la documentación https://github.com/aws/aws-sdk-js-v3/issues/1877
Para hacer esto en mecanografiado también puedes hacer
await new Promise((resolve, reject) => { if (Body instanceof Readable) { Body.pipe(fs.createWriteStream(filePath)) .on('error', err => reject(err)) .on('close', () => resolve()) } });