如何使用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
相关产品推荐
相关产品推荐

