R shiny 通过选中复选框来下载文件

R shiny to download files by selecting the checkbox

有一段代码,其中基本上来自 UI 页面,我想在其中 select 通过复选框的文件名,然后 selecting 这些,然后单击下载按钮 selected 文件将被下载。我被困在 UI,我无法在 UI 上获得这些复选框。 它显示输出为

[object] [Object]

代码如下-

ui <- fluidPage(
verbatimTextOutput("links_list")
)

server <- function(input, output, session) {
get.files <- reactive({
list.files("/Users/harshmeetsingh/Downloads/")
})  

obsList <- list()

output$links_list <- renderUI({    
lapply(as.list(1:length(get.files())), function(i)
{
  btName <- get.files()[i]
print(btName)
# creates an observer only if it doesn't already exists
 if (is.null(obsList[[btName]])) {
 obsList[[btName]] <<- btName 
 }
fluidRow(checkboxInput(btName, get.files()[i])  )
 })
 })
output$downloadzip<-downloadHandler(
filename = function(){
  paste0("Extract.zip")
},
content = function(file){
  files <- NULL;
  for (i in 1:length(obsList)){
    if(input[[obsList[[i]]]])
      files <- c(paste("output_file/",obsList[[i]],sep=""),files)
  }
  #create the zip file
  zip(file,files)
},
contentType = "application/zip"
)

 tempText <- eventReactive({input$TempTest},{ 
l<-c()
for (i in 1:length(obsList)){
  
  if(input[[obsList[[i]]]])
    l<-c(l,paste("output_file/",obsList[[i]],sep=""))
}

return(paste(l) )
},
ignoreInit = TRUE)

output$Temp <-  renderPrint({ tempText()}) 



}

shinyApp(ui=ui,server=server)

我们可以用checkboxGroupInput()来select所有的文件。 input$files_chosen 将是一个包含所有文件名的列表 selected.

请注意,此应用显示主目录中的文件。这可以通过更改 setwd().

中提供的路径进行修改

应用程序:

library(shiny)

#to use relative paths inside zip function
setwd('~')

ui <- fluidPage(
  downloadButton('downloadzip'),
  uiOutput("links_list")
)

server <- function(input, output, session) {
  get.files <- reactive({
    list.files()
  })  
  
  output$links_list <- renderUI({checkboxGroupInput(inputId = 'files_chosen',
                                                    label = 'Choose Files',
                                                    choices = get.files())
  })
  
  output$downloadzip <- downloadHandler(
    filename = function(){
      "Extract.zip"
    },
    content = function(file){
      #create the paths to look for the files.
      files <- input$files_chosen 
      #create the zip file
      zip(zipfile = file, files = files)
    },
    contentType = "application/zip"
  )
}

shinyApp(ui=ui,server=server)