从加载了ShinyDirChoose的文件夹中渲染图像以进行交互式显示

时间:2019-09-11 14:18:04

标签: r shiny

如果用户选择多个图像,则下面的代码将起作用。我如何使用shinyDirChoose来实现这一点,以便用户仅选择图像所在的文件夹。 问题:我不知道如何获取存储在files()对象中的本地数据路径。渲染图像需要此路径。

到目前为止,在网络上找不到任何好的答案。

library(shiny)

ui <- shinyUI(fluidPage(
  tags$script('
              $(document).on("keydown", function (e) {
              Shiny.onInputChange("rightCursor", [e.which,e.timeStamp]);
              }); 
              '),  
  sidebarLayout(
    sidebarPanel(
      fileInput(inputId = 'files', 
                label = 'Select an image or several images',
                multiple = TRUE,
                accept=c('image/png', 'image/jpeg'))
    ),
    mainPanel(
      uiOutput('images'),
      tableOutput('files')
    )
  )
))

server <- shinyServer(function(input, output) {
  rv <- reactiveValues(page = 1)
  output$files <- renderTable(input$files)
  files <- reactive({
    files <- input$files
    files$datapath <- gsub("\\\\", "/", files$datapath)
    files
  })

  output$images <- renderUI({
    if(is.null(input$files)) return(NULL)
    imagename = paste0("image", rv$page)
    image_output <-    imageOutput(imagename)
  })

  observe({
    if(is.null(input$files)) return(NULL)
    for (i in 1:nrow(files()))
    {
      print(i)
      local({
        my_i <- i
        imagename = paste0("image", my_i)
        output[[imagename]] <- 
          renderImage({
            list(src = files()$datapath[my_i], width = 400, height = 400,
                 alt = "Image failed to render")
          }, deleteFile = FALSE)
      })
    }
  })

  navPage <- function(direction) {
      rv$page <- rv$page + direction
  }

  observeEvent(input$rightCursor,{
    navPage(1)
    print(rv$page)
  })

})


shinyApp(ui=ui,server=server)

用户仅选择图像所在的文件夹,而不选择一个或几个文件。

1 个答案:

答案 0 :(得分:1)

这是一种方法。

/beta
    /task one
        __init__.py
        test_solution.py
    /task two
        __init__.py
        test_solution.py

enter image description here