You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R Shiny的downloadHandler中传递用户输入至文件名

解决Shiny中动态生成下载报告文件名的问题

你遇到的问题核心是:直接用paste0给filename赋值时,只会在Shiny应用启动时计算一次,无法响应input$text的实时变化。要实现动态文件名,需要将filename设为返回字符串的函数,每次点击下载按钮时都会重新读取最新的用户输入生成文件名。

修改后的完整Shiny代码

library(shiny)
library(radarchart)

# 示例skills数据集(你可替换为自己的数据)
skills <- data.frame(
  Label = c("技能A", "技能B", "技能C"),
  员工甲 = c(9, 7, 8),
  员工乙 = c(6, 9, 5)
)

shinyApp(
  ui = fluidPage(
    sliderInput("slider", "Slider", 1, 100, 50),
    textInput("text", "输入文件名后缀"),
    selectInput("selectedPeople", "选择人员", choices = c("员工甲", "员工乙")), # 补充原代码缺失的输入控件
    downloadButton("report", "生成报告")
  ),
  server = function(input, output) {
    output$plot1 <- renderChartJSRadar({
      chartJSRadar(skills[, c("Label", input$selectedPeople)], 
                   maxScale = 10, showToolTipLabel=TRUE) 
    })
    
    output$report <- downloadHandler(
      # 动态生成文件名:将filename改为函数,每次下载时重新计算
      filename = function() {
        paste0("my_new_name_", input$text, "-", Sys.Date(), ".html")
      },
      content = function(file) {
        tempReport <- file.path(tempdir(), "report.Rmd")
        file.copy("report.Rmd", tempReport, overwrite = TRUE)
        
        params <- list(scores = skills[, c("Label", input$selectedPeople)])
        
        rmarkdown::render(tempReport, output_file = file,
                          params = params,
                          envir = new.env(parent = globalenv())
        )
      }
    )
  }
)

原Report.Rmd代码无需修改

---
title: "Dynamic report"
output: html_document
params:
  scores: NA
---

```{r}
chartJSRadar(params$scores, maxScale = 10, showToolTipLabel=TRUE)
### 关键说明
- `filename`参数支持传入无参函数,函数内部可直接访问Shiny的`input`对象,获取实时用户输入。
- 原代码中缺失`selectedPeople`对应的UI控件(如`selectInput`),已在示例中补充,你可根据实际需求调整。
- 最终生成的文件名格式为`my_new_name_用户输入文本-YYYY-MM-DD.html`,会随用户输入和日期动态变化。

内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:52:36