如何在Shiny应用程序中下载PDF文件

时间:2016-11-04 10:33:15

标签: r download shiny

我的闪亮应用的www目录中有一个PDF。我希望该文件可供下载。我怎么能这样做。

下载示例效果很好,但不知道如何使用它从www目录下载PDF。

## Only run examples in interactive R sessions
if (interactive()) {

ui <- fluidPage(
  downloadLink("downloadData", "Download")
)

server <- function(input, output) {
  # Our dataset
  data <- mtcars

  output$downloadData <- downloadHandler(
    filename = function() {
      paste("data-", Sys.Date(), ".csv", sep="")
    },
    content = function(file) {
      write.csv(data, file)
    }
  )
}

shinyApp(ui, server)
}

2 个答案:

答案 0 :(得分:8)

查看downloadHandler函数documentation,它有两个没有默认值的参数:filename和content。

filename 是basecaly将要下载的文件的名称。它不属于一个功能。 filename = "your-pdf-name.pdf"的作用与在无参数函数中定义它一样多。

另一方面,

内容会创建一个包含要下载内容的临时文件。在大多数情况下,您将创建一个文件,该文件将通过您在应用程序中创建的内容来实现。

这不是你的情况,我的解决方案在Brasil中提供了一个我们称之为“gambiarra”的东西:它将你要下载的文件复制到downloadHandler闪亮需要的临时文件中。 (我尝试将其定义为文件的路径,但它不起作用)

ui <- fluidPage(
  downloadLink("downloadData", "Download")
)

server <- function(input, output) {

  output$downloadData <- downloadHandler(
    filename = "your-pdf-name.pdf",
    content = function(file) {
      file.copy("www/teste.pdf", file)
    }
  )
}

shinyApp(ui, server)

答案 1 :(得分:0)

如果文件位于 www 文件夹中,那么您只需在 UI 中提供指向它的链接

... (in UI)
  tags$a("Click here to get the PDF", href="your-pdf-name.pdf")
...

如果文件名在开始时未知,则使用 uiOutput/renderUI 并在生成时将 rv$filename 设置为文件名。

... (in UI)
  uiOutput("dlURL")
...


... (in server)
  rv <- reactiveValues(filename="")

  output$dlURL <- renderUI({
    tags$a("Click here to get the file", href=rv$filename)
  })
...