启动downloadHandler,将clientData设置为
我创建了一个闪亮的应用程序,它使用启动downloadHandler,将clientData设置为,r,shiny,R,Shiny,我创建了一个闪亮的应用程序,它使用会话$clientData向服务器获取参数值。它工作得很好,但是,我也希望能够通过url启动下载,例如: localhost:8100/?plot=a&title=mytitle&download=1 然后在server.R中,类似于: if(session$clientData$download == "1"){ download() } 因此,是否可以在server.R中启动downloadHandler() 谢谢 我不确定我是否正
会话$clientData
向服务器获取参数值。它工作得很好,但是,我也希望能够通过url启动下载,例如:
localhost:8100/?plot=a&title=mytitle&download=1
然后在server.R
中,类似于:
if(session$clientData$download == "1"){
download()
}
因此,是否可以在server.R
中启动downloadHandler()
谢谢 我不确定我是否正确理解了您的意图。据我所知,您希望在url中存在查询字符串
download=1
时启动下载。您可以通过注入一些javascript在检测到所需的查询字符串时打开链接来实现这一点。但是会有一些问题。
您的浏览器很可能会阻止弹出窗口。您需要等待足够长的时间才能触发代码(我选择了5秒)
require(闪亮)
runApp(列表(
ui=引导(
标签$head(标签$script(HTML)
addCustomMessageHandler(“jsCode”,
功能(信息){
eval(message.value);
}
);
'))),
downloadLink('downloadData','Download'),
逐字输出(“摘要”)
),
服务器=功能(输入、输出、会话){
感谢@jdharison!这正是我想要做的:)
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))
}
}
})
}
))