【问题标题】:Get original names of files with a function like fileInput (R shiny)使用 fileInput (R shiny) 之类的函数获取文件的原始名称
【发布时间】:2019-10-29 03:35:44
【问题描述】:

我想在浏览器中选择一些文件,比如在 Shiny 中使用 fileInput,但我只需要它们的路径作为字符而不需要其他任何东西。我不想上传它们(但无论如何都没有问题)。当我使用fileInput 时,结果是data.frame,其中包含临时文件夹中文件的路径,名称为0.csv、1.txt、2.pdf ...但我需要原始文件名(带有或没有完整路径)。有没有什么方法可以快速且“简单”地实现这一目标?

【问题讨论】:

  • 让我们假设,我想上传一个名为“test123.csv”的文件。结果应该是什么样子?您想在哪里存储或显示结果?
  • 结果应该看起来像“temporarypath/test123.csv”而不是“temporarypath/0.csv”,上传文件的实际存储位置。我想在我的案例中添加几个文件,并且我想要一个包含我提到的格式的所有路径的向量。
  • 您到底尝试了什么? $name 属性应为您提供浏览器提供的原始文件名,而 $datapath 属性为您提供上传文件的路径。
  • 对不起,我周五修改,我需要周末,我的问题很愚蠢。在您的评论的帮助下,我现在可以用$name 重命名文件,这就是我所需要的。谢谢!

标签: r shiny


【解决方案1】:

这是不可能的一个非常重要的原因:安全

JavaScript 无法访问文件系统,因此您将无法获得用户的完整路径。一种选择是您强制您的用户使用路径,但是……他当然可以躺在那里。也许这样做

你只能这样使用它:

library(shiny)


ui <- fluidPage(
  tags$h1("Test"),
  fileInput("file1", "Choose CSV File",
            accept = c(
              "text/csv",
              "text/comma-separated-values,text/plain",
              ".csv")
  ),
  textInput("path", "Please enter the full path of your file"),
  tableOutput("pathtable")
)


server <- function(input, output, session) {


  testdf <- reactive({

      data.frame(
        ID = 1,
        file = input$path
      )
  })

  output$pathtable <- renderTable({

    if(input$path == "") {
      return(NULL)
    } else {
      testdf()
    }

  })


}

shinyApp(ui = ui, server = server)

【讨论】:

  • 感谢您的有趣回答。我很傻,我问错了问题。我不需要整个路径。我只需要正确的文件名而不是数字和像 0.csv 这样的文件扩展名......对不起!
  • 嗨。你设法解决了这个问题吗?我对图像有疑问(单独上传,必须是这样的)。它们都被命名为 0.jpg,当我生成一个 docx 文档时,它们都是相同的第一张图片
【解决方案2】:

原始名称保存在变量中

input$file1$name

但是,“真实”数据(正确指出为 OP 重命名)可以通过

访问
input$file1$datapath

其中file1是函数fileInput()的InputId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 2019-12-26
    • 1970-01-01
    • 2020-10-19
    • 2018-02-17
    • 1970-01-01
    • 2015-07-06
    • 2021-08-19
    相关资源
    最近更新 更多