【发布时间】:2017-11-10 06:48:50
【问题描述】:
我使用shinyDirChoose 保存了用户定义文件夹的路径。现在我想从该用户的文件夹上传文件,但我不知道该怎么做。
1)全部在服务器端?
2) 以某种方式将文件路径提供给fileInput?
这就是我为应该上传的三个文件构建文件路径的方式。
### ui end, to browse to desired folder
ui = fluidPage(shinyDirButton('directory', 'Folder select', 'Please select a folder'))
### extracting the folder path
server = function(input, output, session) {
volumes <- getVolumes()
shinyDirChoose(input, 'directory', roots=volumes, session=session)
path1 <- reactive({
return(print(parseDirPath(volumes, input$directory)))
})
### constructing the 3 file paths
datpat <- renderText({
req(nchar(path1())>0)
datpat <- paste0(path1(),"/data.csv")
})
vispat <- renderText({
req(nchar(path1())>0)
vispat <- paste0(path1(),"/visit.csv")
})
statpat <- renderText({
req(nchar(path1())>0)
statpat <- paste0(path1(),"/statvisit.csv")
})
所以现在我有了这些路径,但是如何使用它们将相关内容上传到服务器?不幸的是,一个简单的read.csv 并不能解决问题。
编辑 - 但还没有...
在@SBista 提供的大力帮助下进一步工作,我想我正在接近我的目标,但请参阅下面的代码...
volumes <- getVolumes()
shinyDirChoose(input, 'directory', roots=volumes, session=session)
path1 <- reactive({
return(print(parseDirPath(volumes, input$directory)))
})
observe({
if(!is.null(path1)){
### vis1
vis1 <- reactive({
datpat <- paste0(path1(),"/visit.csv")
vis <- read.csv(datpat, header = input$header, sep = input$sep, quote = input$quote,
stringsAsFactors = FALSE)
vis
})
### dataruw1
dataruw1 <- reactive({
datpat <- paste0(path1(),"/data.csv")
dataruw <- read.csv(datpat, header = input$header, sep = input$sep, quote = input$quote,
stringsAsFactors = FALSE)
dataruw
})
}
})
不幸的是,dataruw1 和 vis1 似乎没有生成,因为在尝试将实际数据与 dataruw1() 和 vis1() 一起使用时出现“找不到函数”错误。我错过了什么?任何想法?提前非常感谢!
【问题讨论】:
-
尝试在服务器函数的开头声明
reactiveValue,并在读取时分配值。您编辑的代码的问题是您的reactive expression的范围被限制在if条件内。 -
“将所有文件从 shinyDirChoose 文件夹上传到服务器”是否已解决?
-
@RanonKahn 我只能说下面的答案(或者更确切地说是第二个答案的 cmets 中的内容)符合我的需求......
-
我的印象是您试图通过身份验证等将文件夹的所有或选定内容移动到 FTP 服务器等。
-
不,只是上传到shinyapps.io的服务器,对不起。