Estoy enviando datos a mi backend de Django a través de una solicitud POST, el servidor luego crea un docx usando estos datos y me lo envía de regreso donde estoy tratando de descargarlo usando el siguiente código:
axios.post(route, data).then((res) => { const filename = "report.docx" var blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }); var link = document.createElement('a'); var URL = window.URL || window.webkitURL; var downloadUrl = URL.createObjectURL(blob); link.href = downloadUrl; link.style = "display: none"; link.download = filename; document.body.appendChild(link) link.click() link.remove() });La descarga del archivo funciona, pero cuando lo abro, solo contiene [Objeto Objeto], ¿qué estoy haciendo mal aquí? Revisé el backend y el documento se creó correctamente, ya que tiene el contenido correcto cuando lo guardo cuando se genera en el servidor, por lo que lo estoy enviando mal o creando mal el archivo en el frontend.
Así es como lo envío desde el backend:
#Generating the doc properly before this... response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document') report_filename = 'graph-report-'+now.strftime('%Y-%m-%d_%H-%M-%S')+'.docx' response['Content-Disposition'] = 'attachment; filename=%s'%(report_filename) document.save(response) return responseGracias por ayudarme.
Con Axios, el res en axios.post(route, data).then((res) => es un objeto de respuesta.
Los datos devueltos se encuentran en res.data .
console.log(res.data) para ver que realmente son los datos binarios que espera.new Blob([res.data], ... para usar esos datos para obtener el blob. (Si ya es un blob cortesía de Axios, no es necesario que se moleste). (Aparte, realmente no necesita usar fetch() y createObjectURL para esto, ya que está formando una respuesta binaria similar a una descarga; sería suficiente que el navegador PUBLIQUE los datos deseados, por ejemplo, como un formulario al punto final; descargaría la respuesta de la misma manera).