El siguiente código se utiliza para descargar una imagen mientras se le agrega un nombre personalizado. Me olvidé un poco de eso por un tiempo y quería volver a intentar la descarga y ya no funciona. ¿Me equivoqué en algo aquí?
let imageInit = 'https://via.placeholder.com/350x150'; let image = imageInit.replace('350x250', '200x200'); if (!image) { return; } var download = function (uri, filename, callback) { request.head(uri, function (err, res, body) { console.log('content-type:', res.headers['content-type']); console.log('content-length:', res.headers['content-length']); request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; const generatedName = uuidv4(); const finalName = generatedName.concat('.png'); download(image, finalName, function () { console.log('done'); }); Editar: Esto es raro. Al intentar con este enlace 'https://www.google.com/images/srpr/logo3w.png' se descarga, pero no funciona con ningún otro enlace.
Cuando completo los módulos apropiados que está utilizando, este código aquí funciona bien para mí en el nodo v16.13.2:
const request = require('request'); const { v4: uuidv4 } = require('uuid'); const fs = require('fs'); let imageInit = 'https://via.placeholder.com/350x150'; let image = imageInit.replace('350x250', '200x200'); if (!image) { return; } var download = function(uri, filename, callback) { request.head(uri, function(err, res, body) { console.log('content-type:', res.headers['content-type']); console.log('content-length:', res.headers['content-length']); request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); }; const generatedName = uuidv4(); const finalName = generatedName.concat('.png'); console.log(finalName); download(image, finalName, function() { console.log('done'); });¿Hay algo diferente en todo tu código? ¿O este código específico no te funciona?
Cosas que puedes examinar en tu propio código:
request() como al flujo de escritura para registrar cualquier error.https://via.placeholder.com/200x200 en su propio navegador para ver si funciona.Aquí hay una versión del código con mucho más manejo/registro de errores:
const request = require('request'); const { v4: uuidv4 } = require('uuid'); const fs = require('fs'); let imageInit = 'https://via.placeholder.com/350x150'; let image = imageInit.replace('350x250', '200x200'); if (!image) { return; } var download = function(uri, filename, callback) { request.head(uri, function(err, res, body) { if (err) { console.log(err); callback(err); return; } console.log('content-type:', res.headers['content-type']); console.log('content-length:', res.headers['content-length']); let wStream = fs.createWriteStream(filename).on('error', err => { console.log(err); }); let rStream = request(uri).on('error', err => { console.log(err); }); rStream.pipe(wStream).on('close', () => callback(null)); }); }; const generatedName = uuidv4(); const finalName = generatedName.concat('.png'); console.log(finalName); download(image, finalName, function(err) { if (err) { console.log('finished with error'); } else { console.log('done'); } }); Tenga en cuenta que el módulo request() ha quedado obsoleto, por lo que realmente no debería usarse en el código nuevo en el futuro. Un buen conjunto de alternativas aquí .
Después de mucha investigación encontré la fuente del problema; Tuve process.exit(1); al final de mi código.
Esto se agregó para terminar con la ejecución de todo el código una vez que todo esté terminado, pero aparentemente con esto tampoco se descarga la imagen. Eliminarlo solucionó el problema además del fragmento proporcionado por @jfriend00.