我正在尝试使用建议的here解决方案。 区别在于,我希望用户选择两个文件夹,一个用于保存代码的结果,另一个具有所有文件。 现在的问题是,如何将文件保存在第二个文件夹中(input $ fileout)。有没有办法将此路径传递给处理我的输入文件的函数?我认为会有权限问题。 编辑:我想在my.analysis()函数中使用dataHandler,因为我需要保存多个png,csv和某些特定格式的文件。最好的方法是什么?我的ShinyApp不会打印任何内容,除非已完成分析,然后下载结果。
这是更新的ui.R
library(shiny)
library(shinythemes)
library(shinyWidgets)
shinyUI(tagList(fluidPage(theme = shinytheme("lumen"),
includeScript("./www/text.js"),
titlePanel("Test"),
fluidRow(
column(4,
tags$div(class="form-group shiny-
input-container",
tags$div(tags$label("Choose a
folder", class="btn btn-primary",
tags$input(id = "fileIn", webkitdirectory = TRUE, type = "file", style="display: none;", onchange="pressed()"))),
tags$label("No folder choosen", id = "noFile"),
tags$div(id="fileIn_progress", class="progress progress-striped active shiny-file-input-progress",
tags$div(class="progress-bar")
)
)),
verbatimTextOutput("tbl")
),
fluidRow(
column(8,
verbatimTextOutput("results"))
)
),
HTML("<script type='text/javascript' src='getFolders.js'>
</script>")
)
)
还有我的服务器。R
library(shiny)
library(ggplot2)
library(shinythemes)
library(shinyWidgets)
library(flowCore)
source("myanalysis.R")
options(shiny.maxRequestSize=50*1024^2)
shinyServer(function(input, output, session) {
observeEvent(input$go, {
df <- reactive({
print(input$fileIn)
# Below returns NULL, as it does not have any files in it yet.
print(input$fileout)
inFiles <- input$fileIn
if (is.null(inFiles))
return(NULL)
my.analysis(fs = tmp,output=input$fileout)
})
output$tbl <-renderPrint(
df()
)
output$results = renderPrint({input$mydata
})
})
})
任何帮助将不胜感激。
答案 0 :(得分:1)
这里有两个选项:
选项1
如果您只想在服务器端选择一个文件夹(如果您的应用程序在本地运行,则可能是本地系统),您可以使用ShinyFiles。
选项2
如果您的应用程序正在服务器中运行,则无法从Shiny应用程序将数据写入本地目录。在这种情况下,解决方案是将结果保存在服务器中,然后允许用户使用downloadHandler函数下载结果。