Tengo una función que se supone que obtiene una imagen de una URL externa, la optimiza con nitidez y luego sube la imagen a S3.
Pero no parece que pueda afilarme para trabajar en el cambio de tamaño y la compresión.
Aquí está mi código actual:
const got = require('got'); const sharp = require('sharp'); const AWS = require('aws-sdk'); const s3 = new AWS.S3({ credentials, }); async function uploadFile(url) { // Get file const response = await got(url, { responseType: 'buffer' }); // Resize, compress and convert image before upload const { data, info } = await sharp(response.body) .resize({ width: 512 }) .jpeg({ quality: 70 }) .toBuffer(); console.log('data:', data); const uploadedFile = await s3 .upload({ Bucket: bucket, Key: 'filename.jpg', Body: data, ContentType: 'image/jpeg', }) .promise(); console.log('uploadedFile:', uploadedFile); } Aparece el error: Input file is missing
El código falla cuando se llama al método sharp .
El tipo de salida que obtengo del enlace response.body
Creo que necesitas hacer dos cambios, de la siguiente manera:
const body = await got(url).buffer();y:
const data = await sharp(body) .resize({ width: 512 }) .jpeg({ quality: 70 }) .toBuffer();Con esos cambios, tu código me funciona. Descargué una imagen aleatoria de la web y la subí con éxito a S3. Además, asegúrese de tener paquetes actualizados para got y sharp.