Запуск скачивания из бэкенда
Запустите скачивание файла после завершения процесса, создавшего его.
module App
using GenieFramework
@genietools
@app begin
@out linkhref = "/data.txt"
@in dfile = false
@onbutton dfile begin
# выполняем обработку и запись в файл
write("./public/data.zip", string(randn(10)))
sleep(2)
# Изменяем URL-адрес ссылки для запуска скрипта скачивания файла. URL-адрес по-прежнему будет указывать на
# тот же файл, но ссылка href будет иметь другую привязку после символа #
linkhref = "/data.zip#($(rand(1)))"
end
end
# Определяем скрипт, который будет отслеживать атрибут href в ссылке и переходить по ссылке при его изменении.
# Этот блок @mounted будет запускаться при загрузке страницы в браузере. Скрипт активируется
# с задержкой в 2 секунды, чтобы ссылка сначала отобразилась в браузере
@mounted """
setTimeout(() => {
var linkToWatch = document.getElementById('dynamicLink');
if (!linkToWatch) {
console.error('Link element not found');
return;
}
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'attributes' && mutation.attributeName === 'href') {
console.log('Href changed to:', linkToWatch.href);
linkToWatch.click();
}
});
});
observer.observe(linkToWatch, { attributes: true });
}, 2000); // Delay in milliseconds
"""
ui() = [
# "dynamicLink" — это идентификатор ссылки, отслеживаемой скриптом
# var":href" задается так, чтобы значение атрибута href бралось из реактивной переменной
a(id="dynamicLink", var":href"="linkhref", "Dynamic Link"),
btn("Download", @click(:dfile), loading=:dfile)
]
@page("/", ui)
up()
end