在Shiny.onInputChange

时间:2017-02-20 06:15:57

标签: javascript r download shiny

我正在使用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)

1 个答案:

答案 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)