假设在我的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)
}
)
1条答案
按热度按时间5kgi1eie1#
答案很简单……当更新像report_name这样的服务器级变量时,使用超级赋值运算符〈〈-。
使用reactiveValues也是另一种解决方案。