【发布时间】:2019-06-11 13:40:48
【问题描述】:
我正在创建一个闪亮的应用程序,它在数据表中显示图像和文本。该表将需要根据用户的输入进行更新。当我在窗口中运行应用程序时,表格会按预期更新。但是,当我在浏览器中运行它时,文本会更新,但图像不会。如何让它在浏览器中运行?
编辑:为清楚起见,以下示例只是为了重现该问题。真正的应用程序可以显示任意数量的不同图片,这些图片在用户做出选择之前不会保存在本地(它们是从数据库中提取的)。我希望避免使用不同的文件名,因为我可能最终会在本地保存数十万张图片,但如果这是唯一的解决方案,那么我将不得不定期清理文件夹
可重现的示例(需要 2 个本地图像)
library(shiny)
library(imager)
library(DT)
# Define UI
ui <- fluidPage(
# Application title
titlePanel("Tables to export"),
sidebarLayout(
sidebarPanel(
actionButton("pic1","Pic1"),
actionButton("pic2","Pic2")
),
# Show tables
mainPanel(
fluidRow(
dataTableOutput('tab1')
)
)
)
)
# Define server logic
server <- function(input, output) {
observeEvent(input$pic1, {
pic <- load.image("www/pic1.png")
save.image(pic,"www/picToShow.png")
tab1 <- datatable(t(data.frame("Pic"='<img src="picToShow.png" width=150 height=100>',x1=1,x2=2,x3=3,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
observeEvent(input$pic2, {
pic <- load.image("www/pic2.png")
save.image(pic,"www/picToShow.png")
tab1 <- datatable(t(data.frame("Pic"='<img src="picToShow.png" width=150 height=100>',x1=4,x2=5,x3=6,row.names="p1")),
escape = F, options = list(dom = 't',pageLength = 20))
output$tab1 <- renderDataTable(tab1)
})
}
# Run the application
shinyApp(ui = ui, server = server)
预期行为(窗口中的行为)
浏览器中的行为
【问题讨论】:
-
好吧,因为您将它们都写入相同的文件名“picToShow.png”,您的浏览器假定它们是同一个文件并使用缓存版本。最好不要使用相同的文件名。只需使用“pic1.png”或“pic2.png”作为图像标签中的
src=。否则,您必须编写一些 javascript 来欺骗您的浏览器重新加载它认为已经加载的图像。 -
我有一种感觉,就是这样。好的,谢谢,我看看能不能用不同的文件名。