Rmarkdown中通过Shiny参数选中的文件能否找回原始存储路径?
Shiny文件上传获取原始文件信息解决方案
常规Web端部署场景
- 调用
fileInput组件上传文件时,Shiny返回的文件对象内置两个核心字段,可直接调取用于验证:name:用户选中文件的原始文件名datapath:Shiny生成的临时文件存储路径,用于读取文件内容
浏览器安全策略限制了Web端文件选择器获取本地文件完整原始路径的权限,该场景下仅能拿到原始文件名用于校验。
本地桌面端部署场景
如果是在本地运行的Shiny工具,需要获取文件完整原始路径,可使用以下两种方案:
- 你当前使用的
file.choose()方法完全可行,该函数调用系统原生文件选择对话框,可直接返回选中文件的全路径字符串,适配单文件选择场景。 - 如需支持多文件选择、文件夹选择等更复杂的需求,可使用
shinyFiles包实现,核心示例代码如下:
# 安装依赖包 # install.packages("shinyFiles") library(shiny) library(shinyFiles) # UI部分 ui <- fluidPage( shinyFilesButton("select_file", "选择文件", "请选择需导入的文件", multiple = FALSE), verbatimTextOutput("origin_path") ) # 服务端部分 server <- function(input, output, session) { # 配置可访问的磁盘路径 roots <- c(工作目录 = getwd(), C盘 = "C:/", D盘 = "D:/") shinyFileChoose(input, "select_file", roots = roots, session = session) # 输出原始文件路径 output$origin_path <- renderPrint({ parseFilePaths(roots, input$select_file)$datapath }) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者Andrew Lee
相关产品推荐
相关产品推荐

