gpt4 book ai didi

r - 在 Shiny 中使用 clientData 启动 downloadHandler

转载 作者:行者123 更新时间:2023-12-04 19:08:25 27 4
gpt4 key购买 nike

我创建了一个 Shiny 的应用程序,它使用 session$clientData获取服务器的参数值。它很好用,但是,我也希望能够通过 url 启动下载,例如:

localhost:8100/?plot=a&title=mytitle&download=1

然后在 server.R , 就像是:
if(session$clientData$download == "1"){
download()
}

因此,是否可以启动 downloadHandler()server.R ?

谢谢!

最佳答案

我不确定我是否正确理解了您要执行的操作。我的理解是,您希望在查询字符串 download=1 时启动下载。存在于网址中。您可以通过在检测到所需的查询字符串时注入(inject)一些 javascript 打开链接来做到这一点。不过会有一些问题。
您的浏览器很可能会阻止弹出窗口。在触发代码之前,您需要等待足够长的时间(我选择了 5 秒)。

require(shiny)
runApp(list(
ui = bootstrapPage(
tags$head(tags$script(HTML('
Shiny.addCustomMessageHandler("jsCode",
function(message) {
eval(message.value);
}
);
'))),
downloadLink('downloadData', 'Download'),
verbatimTextOutput("summary")
),
server = function(input, output, session) {
data <- seq(100)
output$downloadData <- downloadHandler(
filename = function() {
paste('data-', Sys.Date(), '.csv', sep='')
},
content = function(file) {
write.csv(data, file)
}
)

output$summary <- renderText({
cnames <- names(session$clientData)

allvalues <- lapply(cnames, function(name) {
item <- session$clientData[[name]]
if (is.list(item)) {
list_to_string(item, name)
} else {
paste(name, item, sep=" = ")
}
})
paste(allvalues, collapse = "\n")
})

observe({
query <- parseQueryString(session$clientData$url_search)
if(!is.null(query$download)){
if(query$download == 1){
jsinject <- "setTimeout(function(){window.open($('#downloadData').attr('href'))}, 5000);"
session$sendCustomMessage(type = 'jsCode', list(value = jsinject))
}
}
})
}
))

关于r - 在 Shiny 中使用 clientData 启动 downloadHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541896/

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