我正在使用Shiny.onInputChange
实现下载链接,该链接将从客户端向服务器发送消息。服务器将使用该消息生成新文件,然后提供给用户下载。 downloadHandler
可以创建一个从服务器下载文件的按钮,但无法从客户端接收消息。
Shiny.onInputChange
可以捕获observeEvent
。
我的问题是如何在observeEvent
。
以下Shiny.onInputChange
有一些示例代码。感谢您的任何建议。
library(shiny)
ui <- shinyUI(
fluidPage(
HTML('<a href="#" onclick=\'Shiny.onInputChange("i_download", [1,Math.random()]);\'>Download</a>')
)
)
server <- function(input, output, session) {
observeEvent(input$i_download, {
rep(input$i_download[1])
# codes to generate a new file and download it
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
我认为您可以使用downloadHandler
接收邮件。这符合您的要求:
library(shiny)
ui <- fluidPage(
downloadLink('down', onclick='Shiny.onInputChange("i_download", [1,Math.random()]);')
# for shiny 0.14.2 or lower use this instead:
# tagAppendAttributes(downloadLink('down'), onclick='Shiny.onInputChange("i_download", [1,Math.random()]);')
)
server <- function(input, output, session) {
output$down <- downloadHandler(
filename = 'down.txt',
content = function(file) {
# use the message (input$i_download) to generate a new file
writeLines(as.character(input$i_download), file)
}
)
}
shinyApp(ui = ui, server = server)