首页 > 解决方案 > R Shiny:输出更改时如何自动开始下载

问题描述

我想生成数据并自动下载。我创建了一个“生成数据”按钮。预计当我单击此按钮时,它将生成数据并自动单击“下载”按钮,因此将自动下载生成的数据。

library(shiny)
library(shinyalert)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  useShinyalert(), 
  actionButton("gener.data", "Generate Data"),
  downloadButton("downloadData")
)


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

  observeEvent(input$gener.data, {

    test_data = data.frame( No=c(1,2,3),Name=c("R","RR","RRR") )
    test_data2 = data.frame( No=c(3,2,1),Name=c("RRR","RR","R") )

    output$downloadData <- downloadHandler(
      filename = function() {
        paste("dataset-", ".zip", sep="")
      },
      content = function(file) {
        tmpdir <- tempdir()

        contain_filename <- c( "test.csv", "test2.rds"  )
        write.csv( test_data ,  contain_filename[1] )
        saveRDS( test_data2,  contain_filename[2] )  

        zip(zipfile=file, files=  contain_filename  )

      },contentType = "application/zip"
    )

    #auto click the downloadData button
    runjs("$('#downloadData')[0].click();")

    #show message
    shinyalert(
      title = 'Compelete!',type='success',
      confirmButtonText = "OK"
    )


  })
}

shinyApp(ui, server)

实际上,当我单击“生成数据”按钮时,它会下载 html 文件,而不是预期的数据。似乎在生成输出数据之前执行了js代码。

生成输出后如何自动单击“下载数据”?或者如何在输出更改后立即自动单击“下载数据”?

标签: rshinydownload

解决方案


推荐阅读