AFAIK, невозможно отменить загрузку после нажатия кнопки.
Вот способ загрузки файла без использования downloadHandler
. Он состоит в создании элемента a
, и после нажатия кнопки файл, который вы хотите загрузить, преобразуется в кодировку base64, а с помощью shinyjs::runjs
строка base64 присваивается атрибуту href
a
элемент и щелчок по элементу a
срабатывает.
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
checkboxInput("data", "Data"),
actionButton("btn", "Download"),
tags$a(id = "dwnld")
)
server <- function(input, output, session) {
observeEvent(input$btn, {
if(input$data){
tmpFile <- tempfile()
write.table(iris, tmpFile)
b64 <- base64enc::dataURI(file=tmpFile, mime="text/plain")
runjs(sprintf('$("#dwnld").attr("href", "%s").attr("download", "out.txt")', b64))
runjs("$('#dwnld')[0].click();")
}else{
runjs("alert('No data!');")
}
})
}
shinyApp(ui, server)