Reputation: 19970
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)
Upvotes: 54
Views: 23877
Reputation: 2641
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")
...
Upvotes: 30
Reputation: 19970
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"
)
Upvotes: 77