Tengo un archivo .json almacenado en un S3 Bucket, ahora quiero descargar el archivo json con nodejs. Escribí el siguiente Código:
const bucket = "s3bucketname"; const AWS = require('aws-sdk'); const S3= new AWS.S3(); exports.handler = async (event, context, callback) => { var transcript = await download(); console.log(transcript); } async function download(){ try { // Converted it to async/await syntax just to simplify. const data = await S3.getObject( { Bucket: bucket, Key: "Test.json", //ResponseContentType: 'application/json' }).promise(); console.log(data); return { statusCode: 200, body: JSON.stringify(data) } } catch (err) { return { statusCode: err.statusCode || 400, body: err.message || JSON.stringify(err.message) } } }Mi respuesta es así: AcceptRanges: 'bytes', LastModified: 2020-02-07T08:04:25.000Z, ContentLength: 12723, ETag: '"ea7de645f93c45b3jkj4e7ffjdsf"', ContentType: 'application/octet-stream', Metadata: { }, Cuerpo: Búfer 7b 0d ...
En el cuerpo, obtengo un búfer de mi JSON, si lo convierto a través de herramientas como: https://onlineutf8tools.com/convert-bytes-to-utf8
Obtengo mi cadena JSON como la quiero. ¿Cómo puedo hacer eso en Javascript/nodejs? No necesito el Buffer, necesito el JSON en String. Intenté de diferentes maneras, pero aún no funcionó.
No tengo la reputación de agregar un comentario para la respuesta de @Ashish Modi. El data.Body.toString('utf-8') lo convertirá en una cadena simple, no en un objeto json.
Si desea tener el objeto json, puede convertir la cadena en un objeto json mediante JSON.parse(obj.Body.toString('utf-8'))
Debe hacer data.Body.toString('utf-8') para obtener el json adecuado (versión de cadena) del búfer.