#r #shiny #shinydashboard
#r #блестящий #шинидашборд
Вопрос:
Мне было интересно, есть ли способ загрузить несколько файлов одним файлом, содержащим их имена. Например, у меня есть файл .txt, в котором 3 строки с надписью «Файл 1.txt» «Файл 2.txt» и «Файл 3.txt» и я хочу загрузить эти 3 файла в таком порядке (файл с именами находится в той же папке, что и подлежащие загрузке файлы).
Я не хочу использовать fileInput(..., multiple = TRUE)
, потому что при загрузке несколько файлов упорядочиваются по умолчанию в алфавитном порядке. С помощью нескольких файлов пользователь может изменить имена, которые будут загружены таким образом, но если у вас много файлов, это стало раздражающей задачей.
Я подумал, что мог бы вставить имя в последнюю часть пути к данным, но при загрузке файла путь к данным находится в локальной временной области, а не в фактическом местоположении файла, как показано на рисунке ниже.
Спасибо!
Ответ №1:
Когда файл загружается веб-приложением Shiny, файлу присваивается новое имя и он хранится во временной папке сервера. Все операции чтения выполняются с помощью этого файла, хранящегося на стороне сервера. Сервер не имеет привилегий для доступа к файловой системе клиента и не способен считывать какие-либо файлы с ПК клиента. Таким образом, нет очевидных способов решить поставленную задачу желаемым образом, и я думаю, что ее не следует использовать, даже если способ найден, поскольку он открывает ворота для рисков несанкционированного доступа к файловой системе.
Я думаю, что если задача не может быть решена каким-либо альтернативным способом, вам следует рассмотреть пользовательский интерфейс с упорядоченным списком создания файлов, упаковки на стороне клиента и отправки на сторону сервера.
Ответ №2:
Если в файлах, которые вы хотите обработать, есть какой-либо шаблон, вы все равно можете использовать multiple = T в fileinput для обработки на сервере.
Мой пример ниже упорядочивает размер загруженных файлов, но вы также можете создать пользовательский порядок для атрибута name (при условии, что вы будете использовать этот список в качестве индекса для обработки).
library(shiny) library(magrittr) ui lt;- fluidPage( fileInput(inputId = "fileinput", label = "select", multiple = TRUE) ) server lt;- function(input,output,session) { observeEvent(input$fileinput, { print(input$fileinput %gt;% dplyr::arrange(desc(size))) }) } shinyApp(ui,server)
Комментарии:
1. Спасибо! Мы установили, что по умолчанию приложение упорядочивает файлы в алфавитном порядке, и при желании пользователь может загрузить файл с упорядоченными именами. Я оставляю код в почте.