Я использовал fileInput
в своем блестящем приложении, чтобы загрузить файл, а затем создать реактивный объект, который позволяет мне читать data.frame и делать другие вещи, такие как поднаборы или фильтрация.Однако мне нужно получить абсолютный путь к файлу для других вычислений, и, похоже, fileUpload
хранит только временный путь.
Вот серверная часть, которая работает
server = function(input, output) {
options(shiny.maxRequestSize=100*1024^2)
contents <- reactive({
inputFile <- input$fileUpload
if (is.null(inputFile))
return()
read.delim(inputFile$datapath, header = TRUE)
})
# Return filename as another object
file_name <- reactive({
inFile <- input$fileUpload
if (is.null(inFile))
return()
else { print(inFile$name); return(tools::file_path_sans_ext(inFile$name))}
})
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
Тем не менее, я хотел бы использовать опцию shinyFiles
, потому что она хранит реальный путь, и мне понадобится этот путь для загрузки большего количества файлов, которые у меня есть, эта часть кода на сервере пытается имитировать то же поведение, что и fileUpload
, ноэто не работает
server = function(input, output, session) {
volumes = getVolumes()
volumes <- c(Home = fs::path_home(), "R Installation" = R.home(), getVolumes()())
file_selected <- reactive({
shinyFileChoose(input, "file", roots = volumes, session = session)
return(parseFilePaths(volumes, input$file))
})
contents <- reactive({
if (is.null(file_selected()))
return()
read.delim(file_selected(), header = TRUE)
})
# Reactive function creating the DT output object
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
Я получил ошибку о file
должна быть строка символов или соединение, и если я использую read.delim(as.character(file_selected()), header = TRUE)
, то ошибка о недопустимом аргументе "description"