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

mwyxok5s  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(186)

我有一个PDF文件在我的闪亮的应用程序的www目录。我想该文件可供下载。我怎么能做到这一点。
下载示例运行良好,但不知道使用它从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)
}
mtb9vblg

mtb9vblg1#

看看downloadHandler函数documentation,它有两个没有默认值的参数:文件名和内容。

filename基本上是要下载的文件的名称。它不必在函数中。filename = "your-pdf-name.pdf"的工作原理与在无参数函数中定义它一样。

另一方面,content会创建一个临时文件,其中包含要下载的内容。在大多数情况下,您将创建一个文件,该文件将由您在应用中创建的内容完成。
这不是你的情况,我的解决方案提供了我们在巴西称为“gambiarra”的东西:它会把你想要下载的文件复制到shiny需要的临时文件中,然后放到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)
neskvpey

neskvpey2#

如果文件在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)
  })
...
91zkwejq

91zkwejq3#

  • (在“你的答案”中再次添加...使用格式。)* @Bill34给了我需要的答案。这篇文章扩展了这个想法。

我的应用程序帮助用户创建某些感兴趣的文件。然后我使用我的包shinyDebuggingPanel(在github上),打开一个带有control-D的交互式R框,然后粘贴:

system('cp file-to-download www') 
tags$a("Click here to get the file", href="file-to-download")

点击!瞧!它在这里:要下载的文件位于本地“下载”文件夹中。
PS:我经常使用shinyDebuggingPanel。忘记创建www文件夹了?没问题!Control-D打开shinyDebuggingPanel,然后粘贴到system('mkdir www')

相关问题