Я хочу создать обработчик загрузки, который обновляет тип и имя файла для загрузки на основе пользовательских данных. Единственный способ сделать это в других запросах - это выбрать пользователем тип файла, который он хочет загрузить, однако я хочу, чтобы это было функцией остальной части приложения.
Вот упрощенная версия моего кода. Он хорошо работает за один прогон, но затем, если вы измените входные данные в верхней части приложения, он все равно будет загружен с исходным именем и форматом файла.
Я пробовал различные комбинации реактивов безрезультатно. Если вы попытаетесь сделать контент / имя файла и т. Д. Обработчиком загрузки вызовом реактивной функции, которая вызывает другие проблемы, например,
library(plyr)
library(tidyr)
library(dplyr)
library(xlsx)
library(zoo)
library(shiny)
df_1 <- data.frame(x = c(1:5))
df_2 <- data.frame(x = letters[1:5])
server <- function(input, output, session) {
### which process?
output$a <- renderUI ({
selectInput(inputId = "a")
})
processed_file <- reactive({
if(input$a == 'Donorfy') {
a <- df_1
} else if(input$a == 'Sage') {
a <- df_2
}
a
})
output$download <- downloadHandler(
filename = ifelse(input$a == 'Donorfy', gsub('-', '_',
paste0('Sage_upload_', Sys.Date(), '.csv')),
gsub('-', '_', paste0('Donorfy_upload_', Sys.Date(), '.xlsx'))),
content = ifelse(input$a == 'Donorfy',
function(file) {write.csv(processed_file(),file, row.names = FALSE, na = '')},
function(file) {write.xlsx(processed_file(),file,
showNA = FALSE, row.names = FALSE, sheetName = 'Donations')}),
contentType = ifelse(input$a == 'Donorfy','text/csv',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
)
}
ui <- fluidPage(
h3('Simplified example app of reactive Downloadhandler'),
hr(),
fluidRow(
# Select Year
column(4, selectInput('a',label = "Which system are you moving data FROM?",
choices = c('','Donorfy', 'Sage'),
selected = '')),
column(4, selectInput('b',label = "Which system are you moving data TO?",
choices = c('','Donorfy', 'Sage'),
selected = ''))
),
fluidRow(
column(12,align="center", downloadButton(outputId = 'download', label = 'Convert and Download Files'))
))
shinyApp(ui, server)