Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
Nodo JS con Axios. Cómo obtener la extensión de la imagen de la URL

Estoy tratando de descargar la imagen y guardarla en mi servidor desde la dirección URL. Entonces, por ejemplo, hago una solicitud POST con la URL de la imagen. Descargo la imagen y la guardo en mi servidor. El problema surge cuando necesito calcular la extensión de la imagen. En este momento funciona estáticamente solo para archivos jpg, pero también debería funcionar para png. ¿Cómo puedo averiguar la extensión del archivo antes de guardarlo?

Una forma sería obtener la extensión desde la propia URL, pero no todas las URL tendrán la extensión, por ejemplo: https://media.istockphoto.com/photos/winter-in-the-sequoias-picture-id1292624259

Este es el código que he hecho ahora mismo. Funciona, sin embargo, como dije, es estático y solo funciona para jpg:

 var config = { responseType: 'stream' }; async function getImage(url) { let time = Math.floor(Date.now() / 1000) let resp = await axios.get(url, config) resp.data.pipe(fs.createWriteStream(time+'.jpg')) // here I need to get the image extension isntead of static '.jpg' }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede usar encabezados de respuesta para eso. El encabezado Content-Type debe indicarle el tipo de archivo y con Content-Disposition puede obtener el nombre del archivo con la extensión.

En su código puede acceder a estos encabezados como este

 resp.headers['content-type']; resp.headers['content-disposition'];
about 4 years ago · Juan Pablo Isaza Denunciar

0

Sugeriría usar un módulo como mime para obtener la extensión del tipo de contenido.

Ejemplo completo:

 const axios = require('axios'); const fs = require('fs'); const mime = require('mime'); var config = { responseType: 'stream' }; async function getImage(url) { let time = Math.floor(Date.now() / 1000) let resp = await axios.get(url, config) const contentLength = resp.headers['content-length']; const contentType = resp.headers['content-type']; const extension = mime.extension(contentType); console.log(`Content type: ${contentType}`); console.log(`Extension: ${extension}`); const fileName = time + "." + extension; console.log(`Writing ${contentLength} bytes to file ${fileName}`); resp.data.pipe(fs.createWriteStream(fileName)); } const url = 'https://media.istockphoto.com/photos/winter-in-the-sequoias-picture-id1292624259'; getImage(url)

Esto dará una salida algo así como:

Tipo de contenido: imagen/jpeg
Extensión: jpeg
Escribiendo 544353 bytes en el archivo 1638867349.jpeg
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda