Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R Shiny: Download existing file

Tags:

r

shiny

Let's say I have an existing zip file (out.zip) in my shiny app (i.e. located on a server). I would like to have the user be able to download this file. This question is very similar to this one. However, that question zips files within the downloadHandler whereas the zip file already exists in my case.

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)
like image 768
cdeterman Avatar asked Oct 29 '15 14:10

cdeterman


2 Answers

After poking around with different file handling functions I discovered that file.copy can be used to download the file.

I change downloadHandler to:

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

  content <- function(file) {
    file.copy("out.zip", file)
  },
  contentType = "application/zip"
)
like image 200
cdeterman Avatar answered Nov 14 '22 01:11

cdeterman


A few years later, but I think there is a simpler way if you do not need dynamic file generation by placing the file in the www/ folder of the Shiny app:

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

Then when your Shiny app is live the file is available at shiny-url.com/downloadme.csv - or when testing locally 127.0.0.1:1221/downloadme.csv

e.g. to use within your Shiny ui:

# in ui somewhere
...
  a(href="downloadme.csv", "Download CSV", download=NA, target="_blank")
...
like image 34
MarkeD Avatar answered Nov 14 '22 02:11

MarkeD