Shiny DownloadHandler不使用Sys.time()更新文件名

Jas*_*ley 6 r download shiny

你如何获得一个有光泽的downloadHandler来更新filename每次点击下载按钮后的值?我尝试使用Sys.time构建一个唯一的文件名.唉,当Shiny应用程序打开时,Sys.time()似乎只执行一次.因此,尝试第二次下载文件不会给出新文件名,只是在文件名末尾给出[1].

下面的最小可重复示例:

library(shiny)

if (interactive()) {

  ui <- fluidPage(
    downloadButton("downloadData", "Download")
  )

  server <- function(input, output) {
    # Our dataset
    data <- mtcars

    output$downloadData <- downloadHandler(
      filename = paste("example",gsub(":","-",Sys.time()), ".csv", sep=""),
      content = function(file) {
        write.csv(mtcars,file)
      }
    )
  }

  runApp(list(ui=ui,server=server),launch.browser=T)
}
Run Code Online (Sandbox Code Playgroud)

确保您尝试在同一实例中第二次下载文件,检查文件上的名称.

Jor*_*eys 5

这是因为你没有给出一个函数,而是一个值作为 的参数filename。这就是您始终具有相同文件名的原因:在downloadHandler启动时分配一个值,而在每次单击downloadButton.

因此,将文件名的代码包装在一个函数中,您的问题就解决了:

library(shiny)

if (interactive()) {

  ui <- fluidPage(
    downloadButton("downloadData", "Download")
  )

  server <- function(input, output) {
    # Our dataset
    data <- mtcars

    output$downloadData <- downloadHandler(
      filename = function(){
        paste("example",gsub(":","-",Sys.time()), ".csv", sep="")
        },
      content = function(file) {
        write.csv(mtcars,file)
      }
    )
  }

  runApp(list(ui=ui,server=server),launch.browser=T)
}
Run Code Online (Sandbox Code Playgroud)

此信息也可以在 RStudio 的以下文章中找到:

https://shiny.rstudio.com/articles/download.html