动态更新shiny downloadHandler文件路径(例如,单击按钮)

yptwkmov  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(111)

假设在我的Shiny应用程序上,我有一个下载按钮,可以从服务器目录'out/'下载文件。但是,如果我使用该应用程序在服务器上生成另一个文件'out/report_fdgjwp. pdf'(服务器上随机生成的文件名),我如何在downloadHandler中更新文件路径?目前,即使使用路径名函数,文件路径也不会通过变量更新。
在这里,原始文件路径是用变量report_dir和report_name声明的,它们分别是'out/'和'blank'。单击提交按钮会将report_name变量更新为'new_name',但单击提交按钮后单击下载按钮不会更改downloadHandler中打印出的report_name。它也不会将文件路径更新为'out/new_name.pdf'

## in ui.R
  actionButton('submit', 'Submit'),
  downloadButton('download_report', 'Download')
## in server.R
  report_dir <- 'out/'
  report_name <- 'blank'

  submit_buttons <- reactive({
    req(isTruthy(input$submit))
  })

  observeEvent(submit_buttons(), {
    report_name <- 'new_name'
  })
  
  output$download_report <- downloadHandler(
    filename = function() {
      paste0('report_', Sys.Date(), '.pdf')
    },
    content = function(file) {
      print(report_name) ### returns 'blank' even after submit button is clicked
      file.copy(paste0(report_dir, report_name, '.pdf'), file)
    }
  )
5kgi1eie

5kgi1eie1#

答案很简单……当更新像report_name这样的服务器级变量时,使用超级赋值运算符〈〈-。

observeEvent(submit_buttons(), {
  report_name <<- 'new_name'
})

使用reactiveValues也是另一种解决方案。

相关问题