【问题标题】:Shiny DownloadHandler doesn't update filename using Sys.time()Shiny DownloadHandler 不使用 Sys.time() 更新文件名
【发布时间】:2017-08-23 02:15:43
【问题描述】:

在每次点击下载按钮后,如何在闪亮的 downloadHandler 中更新filename 的值?我尝试使用 Sys.time 构造一个唯一的文件名。唉,Sys.time() 似乎只在 Shiny 应用程序打开时执行一次。因此,再次尝试下载文件不会给出新的文件名,它只是在文件名的末尾给出 [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)
}

确保您尝试在同一实例中再次下载该文件,并检查文件上的名称。

【问题讨论】:

    标签: r download shiny


    【解决方案1】:

    这是因为你没有给出一个函数而是一个值作为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)
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2018-11-29
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多