Есть ли способ загрузить несколько файлов, один из которых содержит их имена в блестящем?

#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. Спасибо! Мы установили, что по умолчанию приложение упорядочивает файлы в алфавитном порядке, и при желании пользователь может загрузить файл с упорядоченными именами. Я оставляю код в почте.