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

如何使用capture包将R Shiny应用截图保存到根目录而非下载?

R Shiny词云截图保存到应用根目录实现方案

你当前使用的截图类包默认逻辑是触发前端用户下载到本地,要实现保存到应用根目录(服务端目录),只需要将前端生成的截图数据回传到Shiny服务端进程,再写入本地文件即可,以下是可直接运行的修改后代码:

依赖安装

先安装所需依赖包:

install.packages(c("shinyscreenshot", "base64enc"))

完整可运行代码

library(shiny)
library(shinydashboard)
library(wordcloud2)
library(shinyscreenshot)
library(base64enc)

ui <- dashboardPage(
  title = "wordcloud",
  header = dashboardHeader(
    title = "Wordcloud"
  ),
  sidebar = dashboardSidebar(),
  body = dashboardBody(
    fluidRow(
      column(width = 3),
      column(
        width = 6,
        box(
          title = "wordcloud", solidHeader = TRUE, status = "primary", width = 12,
          wordcloud2Output("wordcloud")
        ),
        id = "cloud"
      ),
      column(width = 3)
    ),
    fluidRow(
      div(
        actionButton("save_cloud", icon("camera"), "保存词云到服务端"),
        style = "text-align: center;"
      )
    )
  )
)

server <- function(input, output){
  output$wordcloud <- renderWordcloud2(
    wordcloud2(demoFreq, size=1, color='random-dark')
  )
  
  # 监听保存按钮点击事件
  observeEvent(input$save_cloud, {
    screenshot(
      selector = "#cloud",
      download = FALSE,
      # 回调函数处理前端传回的base64格式截图数据
      callback = function(data) {
        # 移除base64数据头标识
        img_raw <- base64decode(gsub("^data:image/png;base64,", "", data))
        # 写入应用根目录,文件名为cloud.png
        writeBin(img_raw, con = "./cloud.png")
        message("截图已保存至应用根目录:cloud.png")
      }
    )
  })
}

shinyApp(ui, server)

注意事项

  • 若应用部署在远程服务器,需确保Shiny运行进程对应用根目录有写入权限
  • 可自定义保存的文件名,如需按时间戳命名可将路径修改为paste0("./cloud_", gsub("[: -]", "", Sys.time()), ".png")
  • 如需调整截图格式为jpg等其他类型,同步修改base64头匹配规则和文件后缀即可

内容的提问来源于stack exchange,提问作者Wahiduzzaman Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:10