我有一个闪亮的应用程序,用户可以在其中创建地图,然后下载它们。在本地,这可行,但是当我将其部署到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文档。
答案 0 :(得分:0)
我对此的解决方案是将webshot::install_phantomjs()
添加到我的全局文件中。我本来是在考虑这一点,但担心它会做什么(如我的帖子所述)。但是,添加它似乎并不会产生我担心的不利影响,因此,将这个答案作为面对相同问题的人们的一种选择。