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

296
Vistas
Enviar pdf (o cualquier archivo) en una solicitud POST como cadena json y luego escribirlo por fs

Estoy creando un sitio web y necesito hacer un servidor POST backend. Creé el 90%, pero el problema al que me enfrento es que necesito enviar JSON y un pdf (normalmente enviado por multipart/form-data, pero necesitaría una ruta diferente). Lo que estoy tratando de hacer es transformar el archivo en base64string, enviarlo en una solicitud y luego restaurarlo y escribirlo en un archivo. Todo esto sucede, y el PDF incluso devuelve datos codificados, pero el PDF es solo una página en blanco cuando se escribe, incluso después de volver a convertirse a binario y escribirse.
Código JS del lado HTML:

 async function post(endpoint){ let binaryCV; let CV = document.getElementById("upfile").files[0]; var reader = new FileReader(); reader.onload = (readerEvt)=>{ var binaryString = readerEvt.target.result; binaryCV = binaryString; let xhr = new XMLHttpRequest(); let object = { name: document.getElementById("ecaName").value, email: document.getElementById("ecaEmail").value, phone: document.getElementById("ecaTel").value, class: document.getElementById("ecaClass").value, institute: document.getElementById("ecaInstitute").value, paragraph:{ experience: document.getElementById("ecaExp").value, why: document.getElementById("ecaWhyPart").value, changes: document.getElementById("ecaWhatChanges").value, }, CV: binaryCV, } xhr.open("POST", `http://localhost:8080/apply/internship/${endpoint}`,true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(object)); }; await reader.readAsBinaryString(CV); /*xhr.onload = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("demo").innerHTML = xhttp.responseText; } };*/ }

Devolución de llamada JS del lado del servidor:

 app.post('/apply/internship/econoxe', async (req, res)=>{ res.sendStatus(200); let CV = req.body.CV; fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV) console.log(req.body); })

Todo esto devuelve archivos PDF 100% en blanco (con un tamaño de archivo más grande que el original por alguna razón) sin importar qué PDF cargue
Por favor ayuda
Si conoce alguna otra forma de hacer lo que quiero decir en una solicitud y ruta, ¡díganos!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

¡Encontré la respuesta!
tuve que cambiar

 fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV)

a

 fs.writeFileSync(path.join(__dirname,`../CV/${req.body.email}.pdf`),CV,"binary")

Y esto solucionaría el problema.

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