Esto es una locura, pero no sé cómo hacerlo, y debido a lo comunes que son las palabras, es difícil encontrar lo que necesito en los motores de búsqueda. Estoy pensando que esto debería ser fácil de responder.
Quiero una descarga de archivo simple, que haría lo mismo que esto:
<a href="file.doc">Download!</a>
Pero quiero usar un botón HTML, por ejemplo, cualquiera de estos:
<input type="button" value="Download!">
<button>Download!</button>
Del mismo modo, ¿es posible activar una descarga simple a través de JavaScript?
$("#fileRequest").click(function(){ /* code to download? */ });
Definitivamente no estoy buscando una manera de crear un ancla que se parezca a un botón, usar scripts de back-end o jugar con encabezados de servidor o tipos mime.
javascript
html
download
brentonstrina
fuente
fuente
Respuestas:
Para el botón que puedes hacer
fuente
Puede activar una descarga con el
download
atributo HTML5 .Dónde:
path_to_file
es una ruta que se resuelve en una URL en el mismo origen . Eso significa que la página y el archivo deben compartir el mismo dominio, subdominio, protocolo (HTTP frente a HTTPS) y puerto (si se especifica). Las excepciones sonblob:
ydata:
(que siempre funcionan) yfile:
(que nunca funciona).proposed_file_name
es el nombre de archivo para guardar. Si está en blanco, el navegador usa de manera predeterminada el nombre del archivo.Documentación: MDN , HTML Standard en la descarga , HTML Standard en
download
, CanIUsefuente
download
ytarget="_blank"
parece ser suficiente para cubrir la mayoría de los casos de uso. Los navegadores que entienden lodownload
tratan como una descarga, de lo contrario se abre en una nueva pestaña.HTML:
fuente
Con jQuery:
fuente
Hilo antiguo pero le falta una solución js simple:
fuente
Puede hacerlo con "truco" con iframe invisible. Cuando configura "src", el navegador reacciona como si hiciera clic en un enlace con el mismo "href". A diferencia de la solución con formulario, le permite incrustar lógica adicional, por ejemplo, activar la descarga después del tiempo de espera, cuando se cumplen algunas condiciones, etc.
También es muy ingenioso, no hay una nueva ventana / pestaña parpadeante como cuando se usa
window.open
.HTML:
Javascript:
fuente
Versión Bootstrap
Documentado en Bootstrap 4 docs , y funciona en Bootstrap 3 también.
fuente
Creo que esta es la solución que estabas buscando
Tengo un caso en el que mi Javascript genera un archivo CSV. Como no hay una URL remota para descargarlo, uso la siguiente implementación.
fuente
location.href
soluciones.Qué pasa:
fuente
Puede ocultar el enlace de descarga y hacer que el botón haga clic en él.
fuente
Si está buscando una solución vainilla de JavaScript (sin jQuery) y sin usar el atributo HTML5, puede intentarlo.
fuente
Esto es lo que finalmente funcionó para mí, ya que el archivo a descargar se determinó cuando se cargó la página.
JS para actualizar el atributo de acción del formulario:
Llamando a JS para actualizar el atributo de acción del formulario:
Etiqueta de formulario con el botón de enviar:
Lo siguiente NO funcionó:
fuente
Si no puede usar el formulario, otro enfoque con downloadjs encaja bien. Downloadjs usa blob y html 5 file API bajo el capó:
{downloadjs (url, nombre de archivo)}) />
* es la sintaxis jsx / react, pero se puede usar en html puro
fuente
En cualquier lugar entre sus etiquetas
<body>
y</body>
, coloque un botón con el siguiente código:¡Esto seguramente funcionará!
fuente
Otra forma de hacerlo en caso de que tenga una URL compleja como
file.doc?foo=bar&jon=doe
agregar campo oculto dentro del formularioinspirado en la respuesta @Cfreak que no está completa
fuente
puedes agregar etiquetas sin texto pero con enlace. y cuando hace clic en el botón como lo tiene en el código, simplemente ejecute la función $ ("yourlinkclass"). click ().
fuente
atributo de descarga hacerlo
fuente
Si usa la
<a>
etiqueta, no olvide usar la URL completa que conduce al archivo, es decir:fuente
Para mí, el botón de anuncios en lugar del texto de anclaje funciona muy bien.
Puede que no esté bien según la mayoría de las reglas, pero se ve bastante bien.
fuente
<a>
Los elementos no pueden contener<button>
elementos.