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)
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"
)
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")
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With