【问题标题】:Ηow can I get the filename of a file uploaded with a shiny fileInput?Η如何获取使用闪亮文件输入上传的文件的文件名?
【发布时间】:2021-06-27 22:27:00
【问题描述】:

我有下面闪亮的应用程序,用户在其中登陆Upload data 面板。如果用户没有上传Upload data 选项卡中需要的两个文件,我希望用户不能移动到其他 2 个tabpanels。这里的问题是,我希望仅当 csv 名称是特定的时才激活两个选项卡。例如,在第一个或第二个fileInput() 中导入的 csv 应命名为 csvone,而在第一个或第二个 fileInput() 中导入的 csv 应命名为 csvtwo。但是无论哪个是第一个,都应该上传两个文件。

library(shiny)
library(shinyjs)

jscode <- "
shinyjs.disableTab = function(name) {
  var tab = $('.nav li a[data-value=' + name + ']');
  tab.bind('click.tab', function(e) {
    e.preventDefault();
    return false;
  });
  tab.addClass('disabled');
}

shinyjs.enableTab = function(name) {
  var tab = $('.nav li a[data-value=' + name + ']');
  tab.unbind('click.tab');
  tab.removeClass('disabled');
}
"

css <- "
.nav li a.disabled {
  background-color: #aaa !important;
  color: #333 !important;
  cursor: not-allowed !important;
  border-color: #aaa !important;
}"

#ui.r
ui <- fluidPage(
  useShinyjs(),
  extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
  inlineCSS(css),
  # App title ----
  titlePanel("Tabsets"),
  
  # Sidebar layout with input and output definitions ----
  sidebarLayout(
    
    # Sidebar panel for inputs ----
    sidebarPanel(
    ),
    
    # Main panel for displaying outputs ----
    mainPanel(
      tabsetPanel( id="tabset",
                   tabPanel("Upload data", value="tab0",
                            fileInput("file1", "Choose CSV File",
                                      multiple = TRUE,
                                      accept = c("text/csv",
                                                 "text/comma-separated-values,text/plain",
                                                 ".csv")),
                            fileInput("file2", "Choose CSV File",
                                      multiple = TRUE,
                                      accept = c("text/csv",
                                                 "text/comma-separated-values,text/plain",
                                                 ".csv"))),
                   tabPanel("Resource Allocation", value="tab1"),
                   tabPanel("Time Series", value="tab2")
      )
    )
  )
)
#server.r

server = function(input, output) {
  print("test")
  js$disableTab("tab1")
  js$disableTab("tab2")
 
 observe({
  req(input$file1, input$file2)
  js$enableTab("tab1")
  js$enableTab("tab2")
})
}

shinyApp(ui, server)

【问题讨论】:

    标签: javascript html css r shiny


    【解决方案1】:

    只需像这样将启用命令包装在 if/else 语句中

    顺便说一句:您(应该)问的问题本质上是“我怎样才能获得带有闪亮fileInput 的上传文件的文件名?”

    library(shiny)
    library(shinyjs)
    
    jscode <- "
    shinyjs.disableTab = function(name) {
      var tab = $('.nav li a[data-value=' + name + ']');
      tab.bind('click.tab', function(e) {
        e.preventDefault();
        return false;
      });
      tab.addClass('disabled');
    }
    
    shinyjs.enableTab = function(name) {
      var tab = $('.nav li a[data-value=' + name + ']');
      tab.unbind('click.tab');
      tab.removeClass('disabled');
    }
    "
    
    css <- "
    .nav li a.disabled {
      background-color: #aaa !important;
      color: #333 !important;
      cursor: not-allowed !important;
      border-color: #aaa !important;
    }"
    
    #ui.r
    ui <- fluidPage(
      useShinyjs(),
      extendShinyjs(text = jscode, functions = c("disableTab","enableTab")),
      inlineCSS(css),
      # App title ----
      titlePanel("Tabsets"),
      
      # Sidebar layout with input and output definitions ----
      sidebarLayout(
        
        # Sidebar panel for inputs ----
        sidebarPanel(
        ),
        
        # Main panel for displaying outputs ----
        mainPanel(
          tabsetPanel( id="tabset",
                       tabPanel("Upload data", value="tab0",
                                fileInput("file1", "Choose CSV File",
                                          multiple = TRUE,
                                          accept = c("text/csv",
                                                     "text/comma-separated-values,text/plain",
                                                     ".csv")),
                                fileInput("file2", "Choose CSV File",
                                          multiple = TRUE,
                                          accept = c("text/csv",
                                                     "text/comma-separated-values,text/plain",
                                                     ".csv"))),
                       tabPanel("Resource Allocation", value="tab1"),
                       tabPanel("Time Series", value="tab2")
          )
        )
      )
    )
    #server.r
    
    server = function(input, output) {
      js$disableTab("tab1")
      js$disableTab("tab2")
     
     observe({
      req(input$file1, input$file2)
      if(input$file1$name == "csvone.csv" && input$file2$name == "csvtwo.csv"){
        js$enableTab("tab1")
        js$enableTab("tab2")
      }
    })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2015-05-16
      • 2018-09-05
      • 2012-10-12
      相关资源
      最近更新 更多