Buenas tardes,
Escenario: tengo un archivo pdf en el sistema local y cuando el usuario hace clic en el botón, quiero que se descargue. Pero después de descargar el archivo al abrir, se muestra dañado. Al publicar esta consulta, noté que el archivo que se está descargando es de 1 KB y el tamaño del archivo original es de 28 KB. no entendí porque?
Estoy creando el archivo de Excel en el backend y guardándolo en la ubicación del usuario, ya que, debido a la gran cantidad de datos, lleva mucho tiempo, por lo que una vez que se crea el archivo, el usuario puede descargarlo.
A continuación se muestran los códigos de JS.
function download() { var filename="output.pdf"; var element = document.createElement('a'); var fileloc="C:\\ebooks\\PDF\\abc.pdf"; element.setAttribute('href','data:text/plain;charset=utf-8, ' + encodeURIComponent(fileloc)); element.setAttribute('download', filename); document.body.appendChild(element); element.click(); }El archivo original es bueno. Por favor, corrígeme qué estoy haciendo mal.
La URL del esquema data: que está creando se resuelve en un documento de texto sin formato (no un PDF) que contiene el texto C:\ebooks\PDF\abc.pdf .
Está guardando este archivo con una extensión .pdf , por lo que cuando intenta abrirlo, su lector de PDF intenta leerlo como PDF (que no lo es).
Si desea guardar el contenido del archivo en la ruta que especificó, debe:
Haga que el usuario seleccione el archivo usando un <input type="file"> (porque JS no tiene permitido el acceso a los archivos en el disco del usuario a menos que los seleccione explícitamente y genere la URL usando el método FileReader.readAsDataURL() .
Si está creando el archivo en el servidor, como dijo, entonces no hay necesidad de construir una URL de esquema de data: , solo puede usar la URL de esquema https: que apunta al archivo en el servidor.