在使用R Shining使用fileInput上传后,如何获取正确的文件路径?

时间:2019-08-21 12:28:46

标签: r user-interface shiny shinydashboard

我有一个上传文件的代码。使用操作按钮“保存到数据库”上传文件后,我将文件名和文件路径存储在矢量中。

在同一应用程序中,我还有另一个选项卡以表格形式显示excel输出。因此,要读取文件,我将使用检索的文件路径,同时使用操作按钮保存文件。

问题是我得到“文件不存在”,因为路径如下所示

“ C:\ Users \ Arun \ AppData \ Local \ Temp \ RtmpINivvL / 69ff834f0b2623ef2ec95c41 / 0.xlsx”

我上传文件的位置是

“” D:/Data_Dump/summary.xlsx“

如何解决此问题?

UI.R code

tabItem(tabName = "file",
              mainPanel(
                titlePanel(h2("Upload your XLSX file here ")), fluidRow(
                  column(6,
                         fileInput('file1', 'Choose a XLSX file to upload',
                                   accept = c('.xlsx'))),
                  column(6,actionButton("save","Save to Database")),
                  div(DT::dataTableOutput("contents"),style = "font-size: 100%;width: 150%")
                )

              )
      )

server.R code

eventReactive(input$save,{

    filenm <- input$file1
    filenm$name



    tablelist <<- c(tablelist,as.character(filenm$name))
    print(tablelist)
    filePath <<- c(filePath,as.character(filenm$datapath))
    print(filePath)

    return (tablelist)
  })

1 个答案:

答案 0 :(得分:0)

一种获取实际文件路径的解决方法可能是使用shinyFiles包。但是您必须手动通过file.copy()之类的功能来确保上传功能。此外,在shinyFiles中,您无法指定要接受的特定文件类型。

无论如何,这里是shinyFiles的一个小例子:

library(shiny)
library(shinyFiles)

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

  textOutput("txt_file")     
)

server <- function(input,output,session){
  tablelist<-NULL
  filePath<<-NULL
  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)
      #check if file extension is .xlsx 
      tablelist <<- c(tablelist,as.character(file_selected$name))
      print(tablelist)
      filePath <<- c(filePath,as.character(file_selected$datapath))
      print(filePath)
      #upload file via e.g. file.copy()
      output$txt_file <- renderText(as.character(file_selected$datapath))
    }
  })
}
shinyApp(ui = ui, server = server)