获取用户选择的文件夹的路径

时间:2019-06-07 11:59:19

标签: r shiny

我希望用户能够选择一个文件夹(稍后将检索其路径)。

目前,这适用于选择文件而不是文件夹。我无法解释原因。该目录中确实包含文件(已在Windows和Mac上测试)。 有什么想法吗?

library(shiny)
library(shinyFiles)


ui <- fluidPage(
  shinyFilesButton("Btn_GetFile", "Choose a file" ,
                   title = "Please select a file:", multiple = FALSE,
                   buttonType = "default", class = NULL),
  shinyDirButton('folder', 'Folder select', 'Please select a folder', FALSE),

  textOutput("txt_file")     
)


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

  volumes = getVolumes()
  observe({  
    shinyFileChoose(input, "Btn_GetFile", roots=volumes, session = session)

    if(!is.null(input$Btn_GetFile)){
      # browser()
      file_selected<-parseFilePaths(volumes, input$Btn_GetFile)
      output$txt_file <- renderText(as.character(file_selected$datapath))
    }
  })

  observe({  
    if(!is.null(input$Btn_Folder)){
      # browser()
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })


}
shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:1)

那是因为您在这里写了Btn_Folder而不是folder

  observe({  
    if(!is.null(input$Btn_Folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })

替换为:

  observe({  
    if(!is.null(input$folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })

请注意,您无需在观察者内部定义此电抗导体,只需执行以下操作:

  observe({  
    if(!is.null(input$folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      output$dir <- renderText(as.character(input$folder))
    }
  })