【问题标题】:Is there a way to upload multiple files with one containing their names in Shiny?有没有办法上传多个文件,其中一个文件在 Shiny 中包含他们的名字?
【发布时间】:2022-01-10 14:05:21
【问题描述】:

我想知道是否有一种方法可以通过一个包含文件名的文件上传多个文件。例如,我有一个 .txt,它有 3 行,分别是“文件 1.txt”、“文件 2.txt”和“文件 3.txt”,我想按该顺序上传这 3 个文件(带有名称的文件在与要上传的文件相同的文件夹)。

我不想使用fileInput(..., multiple = TRUE),因为当您上传多个文件时,默认情况下会按字母顺序排列。通过这种方式,用户可以通过少量文件更改要上传的名称,但如果您有很多文件,这将成为一项烦人的任务。

我认为我可以将名称粘贴到数据路径的最后一部分,但是当文件上传时,数据路径位于本地临时位置,而不是文件的实际位置,如下图所示。

谢谢!

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    当一个文件被 Shiny WEB 应用程序上传时,该文件被分配了一个新名称并存储在服务器的临时文件夹中。所有的读取都是通过这个服务器端存储的文件完成的。服务器没有访问客户端文件系统的权限,也无法从客户端 PC 读取任何文件。因此,没有明显的方法可以以所需的方式解决所述任务,我想即使找到了方法也不应该使用它,因为它打开了未经授权的文件系统访问风险的大门。

    我猜如果任务不能以任何替代方式解决,你必须考虑一个 UI 界面,其中包含文件创建、客户端打包和发送到服务器端的安排列表。

    【讨论】:

      【解决方案2】:

      如果您要处理的文件有任何类型的模式,您仍然可以在 fileinput 中使用 multiple = T 进行服务器端处理。

      我下面的示例安排了上传文件的大小,但您也可以在 name 属性上创建自定义顺序(假设您将使用此列表作为处理的索引)。

      library(shiny)
      library(magrittr)
      ui <- fluidPage(
        fileInput(inputId = "fileinput",
                  label = "select",
                  multiple = TRUE)
      )
      
      server <- function(input,output,session) {
        
        observeEvent(input$fileinput, {
          print(input$fileinput %>% dplyr::arrange(desc(size))) 
        })
      }
      
      shinyApp(ui,server)
      

      【讨论】:

      • 谢谢!我们已经解决了默认情况下,应用程序会按字母顺序对文件进行排序,如果用户愿意,可以上传具有排序名称的文件。我将代码放在帖子中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 1970-01-01
      • 2010-10-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多