以下代码成功地允许用户浏览和选择文件。但是我无法编写下载此文件的语法。
library(shiny)
library(shinyFiles)
ui <- fluidPage(
shinyFilesButton('files', label='File select', title='Please select a file', multiple=T) ,
verbatimTextOutput('rawInputValue'),
verbatimTextOutput('filepaths') ,
downloadButton("downloadFiles", "Download Files")
)
server <- function(input, output) {
roots = c(wd = 'H:/')
shinyFileChoose(input, 'files',
roots = roots,
filetypes=c('', 'txt' , 'gz' , 'md5' , 'pdf' , 'fasta' , 'fastq' , 'aln'))
output$rawInputValue <- renderPrint({str(input$files)})
filepathsObject <- renderPrint({parseFilePaths(roots, input$files)})
output$filepaths <- filepathsObject
output$downloadFiles <- downloadHandler(
filename = 'filepathsObject' ,
content = function(file) {
file.copy(filepathsObject, file)
}
)
}
shinyApp(ui = ui , server = server)
答案 0 :(得分:0)
要使用downloadHandler
下载文件,您需要提供包含路径字符串的全名,但您的变量filepathsObject
是类"shiny.render.function
的对象。
parseFilePaths
函数将返回包含所需信息的列表,但您需要将其转换为字符。下面是您修改的代码,用于下载以前上传的文件。
请注意,下载按钮在RStudio查看器上效果不佳,因此如果您希望将原始文件名设置为默认值,请在浏览器中启动该应用程序。
library(shiny)
library(shinyFiles)
ui <- fluidPage(
shinyFilesButton('files', label='File select', title='Please select a file', multiple=T) ,
verbatimTextOutput('rawInputValue'),
verbatimTextOutput('filepaths') ,
downloadButton("downloadFiles", "Download Files")
)
server <- function(input, output) {
roots = c(wd = 'H:/')
shinyFileChoose(input, 'files',
roots = roots,
filetypes=c('', 'txt' , 'gz' , 'md5' , 'pdf' , 'fasta' , 'fastq' , 'aln'))
output$rawInputValue <- renderPrint({str(input$files)})
output$filepaths <- renderPrint({parseFilePaths(roots, input$files)})
output$downloadFiles <- downloadHandler(
filename = function() {
as.character(parseFilePaths(roots, input$files)$name)
},
content = function(file) {
fullName <- as.character(parseFilePaths(roots, input$files)$datapath)
file.copy(fullName, file)
}
)
}
shinyApp(ui = ui , server = server)