R Shiny:下载现有文件

cde*_*man 29 r shiny

假设out.zip我的闪亮应用程序中有一个现有的zip文件()(即位于服务器上).我想让用户能够下载此文件.这个问题很相似,这一个.但是,该问题会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)
Run Code Online (Sandbox Code Playgroud)

cde*_*man 42

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

downloadHandler改为:

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

  content <- function(file) {
    file.copy("out.zip", file)
  },
  contentType = "application/zip"
)
Run Code Online (Sandbox Code Playgroud)

  • @ zx8754它应该是您指定的任何文件夹.您只需要提供保存位置的路径即可. (3认同)
  • 例如,当通过 R Studio 运行 Shiny 时,该解决方案是否可以在本地运行,或者仅在生产环境中运行?在我的例子中,下载的是页面的 HTML (3认同)
  • 您的压缩文件存放在哪里?在www文件夹中还是可以在任何文件夹中? (2认同)

Mar*_*keD 16

几年后,但我认为如果您不需要动态文件生成,则有一种更简单的方法:将文件放在www/Shiny 应用程序的文件夹中:

|
|- app.R
|- www/
       - downloadme.csv
Run Code Online (Sandbox Code Playgroud)

然后,当您的 Shiny 应用程序上线时,该文件在shiny-url.com/downloadme.csv- 或在本地测试时可用127.0.0.1:1221/downloadme.csv

例如在你的 Shiny ui 中使用:

|
|- app.R
|- www/
       - downloadme.csv
Run Code Online (Sandbox Code Playgroud)

  • 感谢您包含此答案。如果我不需要动态下载,则无需使事情变得过于复杂。 (6认同)