Tengo una página en mi sitio web que tiene un botón que redirige a una URL que descarga el código fuente del repositorio git para ese sitio web. Aquí está el HTML que tengo hasta ahora:
<!DOCTYPE html> <html> <body> <p>Would you like to download this website's source code?</p> <button type="button" onclick="window.location.href = 'https://codeload.github.com/SteepAtticStairs/steepatticstairs.github.io/zip/refs/heads/main'">Yes</button> <button type="button" onclick="window.location.href = '/index.html'">No</button> </body> </html> Sin embargo, esto descarga un archivo con el nombre steepatticstairs.github.io-main.zip . Tengo un script bash que escribí:
#!/bin/bash url=https://codeload.github.com/SteepAtticStairs/steepatticstairs.github.io/zip/refs/heads/main now="$(date '+%m.%d.%Y')" cd ~/Downloads wget -O "steepatticstairs.github.io_${now}.zip" $url Lo que descarga el archivo con un nombre como steepatticstairs.github.io_03.09.2022.zip . Este es el nombre que quiero, con la fecha al final.
¿Hay alguna manera de que pueda replicar esto en JavaScript, tal vez usando jQuery, donde podría hacer clic en el botón Yes y descargaría el archivo desde la URL, pero cambiaría el nombre antes de descargarlo? Si alguien puede mostrarme rápidamente cómo obtener la fecha en el nombre del archivo en JavaScript, sería increíble, pero podría resolverlo. Solo quiero saber cómo cambiar el nombre del archivo antes de descargarlo.
debido a que el ajax entre dominios será bloqueado por la política CORS, necesita que el servidor envíe la solicitud por proxy y modifique la disposición de contenido en el encabezado de respuesta, por ejemplo: Content-Disposition:attachment;filename= ${filename}.zip
puedes usar ajax para descargar el archivo:
const xhr = new XMLHttpRequest(); xhr.responseType = "blob"; xhr.addEventListener('load', () => { if (xhr.status === 200) { const a = document.createElement('a'); const url = window.URL.createObjectURL(xhr.response); a.href = url; a.download = '${filename}.zip'; a.click() window.URL.revokeObjectURL(url); } }); // if need progress bar can listen progress event // xhr.addEventListener('progress', e => console.log(e.loaded/e.total)) xhr.open('GET', '${url}') xhr.send()