2017-02-21 76 views
2

我试图在本地路径的数据表中显示图像。请注意,本地路径与www文件夹不同,在实际情况下,我无法将图像从指定路径移动到www文件夹。奇怪的是,它是从www的位置开始工作,而不是从规定的路径开始工作。寻找任何提示来解决这个问题。从R中的本地路径显示数据表中的图像Shiny

下面是代码:

library(shiny) 
library(shinyBS) 
library(DT) 

flag <- data.frame(image=c('<img src="C:/Users/string/100x100/100x100_bigimg.jpg"></img>')) 

ui <- shinyUI(pageWithSidebar(
headerPanel("renderImage example"), 
sidebarPanel(
actionButton("go","Go") 
), 
mainPanel(
bsModal("modalExample", "Image", "go", size = "large",imageOutput("myImage")), 

DT::dataTableOutput("dt") 

) 
)) 

server <- shinyServer(function(input, output, session) { 

output$dt <- DT::renderDataTable({ 
DT::datatable(flag,escape = FALSE) 
}) 

observeEvent(input$go,{ 
output$myImage <- renderImage({ 
# Return a list containing the filename 
return(list(src = "C:/Users/string/100x100/100x100_bigimg.jpg", 
    contentType = 'image/png', 
    width = 550, 
    height = 400, 
    alt = "This is alternate text")) 
}, deleteFile = FALSE) 

}) 

}) 

shinyApp(ui,server) 

另外,从规定路径renderImage部分工作完美,但在数据表部分图像是没有得到显示。

回答

0

这可以通过使用addResourcePath来实现 - 适用于Windows以及Shiny web Server.It增加了静态资源目录。 https://shiny.rstudio.com/reference/shiny/latest/addResourcePath.html

这里是工作示例:

ui.R

library(shiny) 
library(shinydashboard) 
library(shinyBS) 
library(DT) 

dashboardPage(
dashboardHeader(title = span(tagList(icon("image"), "Example"))), 
dashboardSidebar(), 
dashboardBody(

div(style="display:inline-block",uiOutput("infoButton")), 

DT::dataTableOutput("table2") 

) 
) 

Server.R

addResourcePath("Images","D/HDImages") # Images are located outside shiny App 

LeafNames <- c('Leaf1.jpg','Leaf2.jpg','Leaf3.jpg','Leaf4.jpg','Leaf5.jpg','Leaf6.jpg','Leaf7.jpg','Leaf8.jpg','Leaf9.jpg','Leaf10.jpg') 
LeafTable <- data.frame(LeafNames) 
LeafTable<- within(LeafTable, thumbnail <- paste0("<img 
src='","Images/",LeafTable$LeafNames,"' height='50'></img>")) 

function(input, output) { 

output$table2<-DT::renderDataTable({ 

responseDataFilter2 <- LeafTable[,c(2,1)] 

displayableData<-DT::datatable(data = as.data.frame(responseDataFilter2, stringAsFactors = FALSE, row.names = NULL), 

           escape=FALSE,selection="single",rownames=FALSE,colnames=c(" ","Name"), 

           callback = JS("table.on('dblclick.dt', 'td', function() { 
              var row=table.cell(this).index().row; 
              Shiny.onInputChange('rows_home',[row, Math.random()])}); 
              table.on('click.dt', 'td', function() { 
              var k=table.cell(this).index().row; 
              if(table.rows('.selected').indexes().toArray()!= '' && table.rows('.selected').indexes().toArray() == k){k=-1;} 
              Shiny.onInputChange('rows_up_home',[k, Math.random()]); 
              Shiny.onInputChange('row_path', table.rows(this).data().toArray()); 
              });"), 

           options = list(

           paging=FALSE,searching = FALSE,ordering=FALSE,scrollY = 750,scrollCollapse=TRUE,server = TRUE 

           )) 

}) 

output$infoButton = renderUI({ 
s = input$table2_rows_selected # Row number of selected row 
if (length(s)!= 0) { 
    tagList(
    actionButton("info", "",icon("info-circle"),style="color:rgb(57,156,8);border-color:rgb(255,255,255)"), 

    # Information Dialog Box 
    bsModal("ObjectInfo", LeafTable[s,c(1)], "info", size = "large", # Enables Pop up Screen 

      img(src= paste0("Images/",LeafTable[s,c(1)]),width='800',height='600') 

    ) 
) 

} 
}) 

} 
相关问题