Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

265
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda