【问题标题】:R: Shiny downloadButton for static contentR:用于静态内容的闪亮下载按钮
【发布时间】:2016-02-18 23:19:59
【问题描述】:

我的 www 文件夹中有一个静态 PDF 文件,我想链接到 UI downloadButton()。似乎服务器端 downloadHandler 需要填充 content 选项,并且用于响应式生成的输出。

我知道我可以在 UI 端使用 HTML 标签 tags$a('Download file.', href = 'foo.pdf') 链接到静态内容。

任何关于如何将两者放在一起的建议都会有所帮助。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我猜你只是想显示一个按钮?您可以将class = 'btn' 添加到您的锚点。 这是一个使用class = 'btn' 和不使用的示例。

    library(shiny)
    runApp(list(
      ui = bootstrapPage(
        numericInput('n', 'Number of obs', 100),
        plotOutput('plot'),
        tags$a(href = 'foo.pdf', class = "btn", icon("download"), 'Download file.'),
        tags$a('Download file2.', href = 'foo2.pdf'),
        downloadButton('downloadData', 'Download')
      ),
      server = function(input, output) {
        output$plot <- renderPlot({ hist(runif(input$n)) })
        output$downloadData <- downloadHandler(
          filename = function() {
            paste('data-', Sys.Date(), '.csv', sep='')
          },
          content = function(con) {
            write.csv(data, con)
          }
        )
    
      }
    ))
    

    要添加像shiny 函数downloadHandler 这样的图标,请参考fontawesome 库。例如 这是闪亮功能使用的图标http://fontawesome.io/icon/download/。 Shiny 有一个包装函数 icon 来包含这些图标。

    【讨论】:

    • 嗯,按钮的样式不如downloadButton 好。有什么方法可以找出适用于这些的正确类吗?
    • @fgnu Shiny 为其图标使用了很棒的字体库。 Shiny 有一个 icon 函数,它充当这个库的包装器。我更新了示例以与添加到锚标记的类进行比较,没有类和通用闪亮的 downloadHandler。
    • 我正在尝试显示一个下载按钮(调用服务器的output$downloadData),但来自 html,即。我没有使用ui.R - 你有什么想法吗?这是一个帖子:stackoverflow.com/questions/25060899/…
    • 对不起,没关系 - 我刚刚在stackoverflow.com/questions/25060899/…回答了我自己的问题
    【解决方案2】:

    这可能会有所帮助:

    content = function(file) {
      file.copy('www/foo.pdf', file)
     }

    【讨论】:

    • 这行得通。请注意,确保变量文件和'www/foo.pdf'不一样,否则'www/foo.pdf'会被覆盖。
    【解决方案3】:

    ui.Rserver.R 的上下文中:

    ui.R

      downloadButton(
        "statFile",
        "Download static file"
      )
    

    server.R

    output$statFile <- downloadHandler(
        filename="example.txt",  # desired file name on client 
        content=function(con) {
          file.copy("file_name_on_server", con)
        }
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2015-04-29
      • 2015-04-26
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多