Cuando envío una imagen a mi servidor web a través de una solicitud http, logra guardar la imagen original con su tamaño completo. Pero cuando intento cambiar el tamaño de la imagen, la guarda como 0 bytes. Estoy usando un módulo npm llamado sharp para cambiar el tamaño de la imagen. Cuando realizo cualquier cambio de tamaño, incluso trabajos de cambio de tamaño masivos en mi máquina local, no hay problemas. Ejecutar este código en mi servidor web Apache hace que en realidad no guarde las imágenes la mayor parte del tiempo. Parece completamente aleatorio qué imágenes realmente guarda. La única parte consistente es que guarda la imagen original enviada a través de la solicitud http.
En mi sistema de archivos habrá la imagen original EG: abcdefg.jpg, y luego abcdefg-350x350.jpg tendrá 0 bytes.
const results = await temp.mv(path.resolve(folderName + name + '.' + extension)) bluebird.map(sizes, (size) => { sharp(folderName + name + '.' + extension) .resize(size.w, size.h, { fit: 'cover' }) .toFile(folderName + name + '-' + size.w + 'x' + size.h + '.' + extension) console.log('Resized image') }) .then(() => { console.log('Images were resized') if (process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing') { console.log('Images resized and going back'); res.status(200).json({'location': '/imageserving/uploads/' + year + '/' + month + '/' + name + '.' + extension, fileIndex: '1'}); } else if (process.env.NODE_ENV === 'production') { //possibly use req.hostname res.status(200).json({'location': 'mysite/uploads/' + year + '/' + month + '/' + name + '.' + extension, fileIndex: '1'}); } })Intenta actualizar esta línea:
sharp(folderName + name + '.' + extension)a esto:
return sharp(folderName + name + '.' + extension) ... eso debería garantizar que la siguiente sección then() esté correctamente encadenada a la promesa y evite posibles condiciones de carrera que pueden estar causando el comportamiento inconsistente.