部署闪亮的应用程序后,将传单地图下载为png

时间:2019-12-29 12:31:42

标签: r shiny leaflet

我有一个闪亮的应用程序,用户可以在其中创建地图,然后下载它们。在本地,这可行,但是当我将其部署到Shinyapps.io时,下载功能不再起作用,它表明它正在下载HTML文档而不是png。

我想到的一件事是可能需要运行webshot::install_phantomjs(),而这是我在本地完成的,但是在应用程序本身中将其作为一行似乎是不正确/不希望的。那么它将把内容下载到别人的计算机上,花费更长的时间,并且如果每次都保持下载状态,则效率很低。

这是我制作/下载地图的代码的简短示例:

library(shiny)
library(leaflet)
library(mapview)


ui<-       
  fluidPage(      
    leafletOutput("map_output"), 
    downloadButton("map_to_download")
  )

server <- function(input, output) {

  reactive_map <- reactive({
      leaflet()%>%
        addTiles()
  })

  output$map_output <-     renderLeaflet(
    reactive_map()
  )

  output$map_to_download <- downloadHandler(
    filename = "map.png",
    content = function(file) {
      mapshot(reactive_map(), file = file, 
              cliprect = "viewport", 
              selfcontained = FALSE)
    })
}

shinyApp(ui, server)

以上内容可在我的机器上运行(我已经运行webshot::install_phantomjs()),但是部署的等效项无法正确下载地图。

有人知道将其部署在Shinyapps.io上时如何使它工作吗,或者有其他方法来下载可行的传单地图?

编辑: 我也在downloadHandler中尝试过此操作:

 output$map_to_download <- downloadHandler(
    filename = "map.png",
    content = function(file) {
      saveWidget(reactive_map(), "temp.html", selfcontained = FALSE)
      webshot::webshot("temp.html", file = file, cliprect = "viewport")
  })

这也可以在本地使用,但不能在部署时使用,尽管在部署时它会下载文本而不是HTML文档。

1 个答案:

答案 0 :(得分:0)

我对此的解决方案是将webshot::install_phantomjs()添加到我的全局文件中。我本来是在考虑这一点,但担心它会做什么(如我的帖子所述)。但是,添加它似乎并不会产生我担心的不利影响,因此,将这个答案作为面对相同问题的人们的一种选择。