Using the downloadFile Shiny Module

Dr. Connie Brett




This Shiny Module provides a consistent-looking and easy-to-use button that facilitates single or multiple types of file downloads.



Shiny Module Overview

Shiny modules consist of a pair of functions that modularize, or package, a small piece of reusable functionality. The UI function is called directly by the user to place the UI in the correct location (as with other shiny UI objects). The module server function that is called only once to set it up using the module name as a function inside the server function (i.e. user-local session scope. The first function argument is a string that represents the module id (the same id used in module UI function). Additional arguments can be supplied by the user based on the specific shiny module that is called. There can be additional helper functions that are a part of a shiny module.

The downloadableTable Shiny Module is a part of the periscope2 package and consists of the following functions:

The downloadFile Shiny Module is a part of the periscope2 package and consists of the following functions:


The downloadFileButton function is called from the ui.R (or equivalent) file in the location where the button should be placed. This is similar to other UI element placement in shiny.

The downloadFileButton function takes the unique object ID for the UI object.

The next two arguments (downloadtypes and hovertext) set the file types the button will allow the user to request and the tooltip text.

If only one download type is given the button will be a single-download type of button that starts the specified download when the button is pressed. The button will look like:

If more than one type is given there will be a dropdown choice given to the user when the button is pressed and the download will start when the choose one of the types. The dropdown choices will be in the order given by the call to the function. The button and dropdown will look like:

# Inside ui_body.R or ui_sidebar.R

#single download type
downloadFileButton(id            = "object_id1", 
                   downloadtypes = c("csv"), 
                   hovertext     = "Button 1 Tooltip")

#multiple download types
downloadFileButton(id            = "object_id2", 
                   downloadtypes = c("csv", "tsv"), 
                   hovertext     = "Button 2 Tooltip")


The downloadFile function is called directly. The call consists of the following:

Data Function or Reactive Expression Requirements

# Inside server_local.R

#single download type
downloadFile(id           = "object_id1", 
             logger       = ss_userAction.Log,
             filenameroot = "mydownload1",
             datafxns     = list(csv = mydatafxn1),
             aspectratio  = 1)

#multiple download types
downloadFile(id           = "object_id2",
             logger       = ss_userAction.Log,
             filenameroot = "mytype2",
             datafxns     = list(csv = mydatafxn1, xlsx = mydatafxn2),
             aspectratio  = 1)

Sample Application

For a complete running shiny example application using the downloadFile module you can create and run a periscope2 sample application using:


app_dir = tempdir()
create_application(name = 'mysampleapp', location = app_dir, sample_app = TRUE)
runApp(paste(app_dir, 'mysampleapp', sep = .Platform$file.sep))

Additional Resources