Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

182
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!