gpt4 book ai didi

r - `downloadHandler` : how to exit gracefully when download will fail (no data)?

转载 作者:行者123 更新时间:2023-12-04 10:32:58 24 4
gpt4 key购买 nike

我有一个 downloadButtondownloadHandler ,当我们要下载数据时,我必须运行一个程序来确定是否有数据要下载。

我找不到取消下载处理程序的方法,下面的应用程序提示我们保存一些垃圾 HT​​ML 文件。

我们怎样才能拥有downloadHandler干净地退出?

library(shiny)

ui <- fluidPage(

downloadButton("btn", "Download")
)

server <- function(input, output, session) {

output$btn <- downloadHandler(
filename = function(){
"out.txt"
},
content = function(file){

# this example always fails.
if(TRUE){
print("Sorry, data not written.")
return(NULL)
} else {
writeLines(mtcars, "out.txt")
}

}

)

}

shinyApp(ui, server)

最佳答案

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)

关于r - `downloadHandler` : how to exit gracefully when download will fail (no data)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60328811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com