R Shiny:下载现有文件

时间:2015-10-29 14:10:16

标签: r shiny

假设我的闪亮应用程序(即位于服务器上)有一个现有的zip文件(out.zip)。我想让用户能够下载此文件。这个问题与this one非常相似。但是,该问题会压缩downloadHandler中的文件,而zip文件已存在于我的案例中。

library(shiny)

app <- list(
  ui = fluidPage(
    titlePanel(""),
    sidebarLayout(
      sidebarPanel(
        downloadButton("downloadData", label = "Download")
      ),
      mainPanel(h6("Sample download", align = "center"))
    )
  ),

  server = function(input, output) {  
    output$downloadData <- downloadHandler(
      filename <- function() {
        paste("output", "zip", sep=".")
      },

      content <- function(file) {
        # not sure what to put here???
      },
      contentType = "application/zip"
    )
  }
)

shiny::runApp(app)

2 个答案:

答案 0 :(得分:39)

在使用不同的文件处理函数后,我发现可以使用file.copy来下载文件。

我将downloadHandler更改为:

output$downloadData <- downloadHandler(
  filename <- function() {
    paste("output", "zip", sep=".")
  },

  content <- function(file) {
    file.copy("out.zip", file)
  },
  contentType = "application/zip"
)

答案 1 :(得分:9)

几年后,但是如果您不需要动态文件生成,可以通过将文件放置在Shiny应用程序的www/文件夹中来找到一种简单的方法:

|
|- app.R
|- www/
       - downloadme.csv

然后,当您的Shiny应用程序处于活动状态时,该文件可以在shiny-url.com/downloadme.csv-或在本地进行测试127.0.0.1:1221/downloadme.csv

时使用。

例如在您的Shiny ui中使用:

# in ui somewhere
...
  a(href="downloadme.csv", "Download CSV", download=NA, target="_blank")
...