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

266
Views
¿Cómo saber la extensión de un archivo para poder descargarlo correctamente en react (javascript)?

Estoy tratando de descargar archivos. El problema es que no se como obtener su extensión y me cargan mal, en cambio si al poner su nombre escribo la extensión (sabiendo cual es) se descarga correctamente. El problema es que en la app no sabes que tipo de archivo te llega, puedes sacar un pdf, un jpg,... Lo que hago es hacer una solicitud desde el backend de NodeJS a AWS S3 para recibir el archivo y lo envío a la interfaz de reaccionar.

Aquí está el código de fondo:

 routerTrainer.get("/download-training", async (req, res) => { const { training_id } = req.headers; let training = await Training.findOne({ where: { id: training_id }, }); if (training) { let readStream = getTrainingS3(`${training.file_id}`); readStream.on('close', () => { res.end() }) readStream.pipe(res); } });

Y aquí está el código de los clientes:

 const downloadTraining = async (id) => { fetch(`${serverPath}/download-training`, { headers: { training_id: id, }, }) .then((res) => res.blob()) .then((blob) => { const link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.setAttribute("download", `here_is_where_I_need_to_put_extension_to_get_it_working`); document.body.appendChild(link); link.click(); }); };

Por favor, si alguien tiene alguna idea sobre cómo hacerlo, estaría muy agradecido por su ayuda.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Si entiendo correctamente, su archivo está en S3. Esto hace que su enfoque no sea válido aquí. S3 tiene un enfoque muy específico para las cargas y descargas de archivos y eso es a través de "URL prefirmadas" y si usara ese enfoque estándar, no estaría enfrentando el problema que enfrenta en primer lugar.

Más información sobre las URL prefirmadas: https://aws.amazon.com/blogs/developer/generate-presigned-url-modular-aws-sdk-javascript/

Pero la idea general es la siguiente:

  1. UI realiza una solicitud a su backend
  2. El backend genera una URL de S3 prefirmada (tenga en cuenta que para que esto funcione correctamente, debe tener permiso de IAM para Obtener objeto). Esta es básicamente una URL especial de S3 que funciona solo durante los próximos minutos y le permite al usuario cargar o descargar archivos (dependiendo de cómo haya configurado la URL prefirmada)
  3. El backend envía una respuesta a la interfaz de usuario con la URL generada
  4. UI ejecuta una solicitud de seguimiento para descargar ahora el archivo. Entonces, la descarga realmente ocurre directamente desde S3, omitiendo su aplicación web por completo. Esto hace que sea mucho más fácil escalar su aplicación más adelante. Especialmente porque... Las aplicaciones de Node.js realmente no se manejan muy bien con demasiada carga en paralelo debido al hecho de que todo se ejecuta en un solo hilo y todo.

Entonces, para responder a la pregunta original, su archivo en S3 probablemente tenga una extensión. Cuando genere la URL prefirmada, esa URL contendrá el nombre completo del archivo junto con la extensión, por lo que realmente no tiene que preocuparse por eso.

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!