В моем текущем окружении я не могу установить соединение с Dropbox, но, пожалуйста, попробуйте подход ниже. Сначала я удалил последнюю строку, ссылающуюся на filePutReport()
в вашем filePutReport2()
реактиве, так как они одинаковы, и вы хотите, чтобы ваш вызов drop_download
дал либо значение (ИСТИНА), либо невидимый объект класса "try-error». Следовательно, вам нужно дополнительно заключить ваш звонок в drop_download
в оператор try
. Таким образом, filePutReport2()
содержит либо значение TRUE, либо невидимый объект класса "try-error". Тогда вы сможете использовать функцию / необходимость проверки в вашем операторе renderUI
, включая пользовательское сообщение об ошибке. Я надеюсь, что это работает, так как я не могу проверить это.
library(shiny)
library(rdrop2)
library(httr)
ui <- # Define UI for dataset viewer application
shinyUI(pageWithSidebar(
headerPanel("Test DropBox html Docs to Shiny"),
sidebarPanel(
selectInput("Cat", "Choose a Category:",
choices = c("A", "B", "C")),
selectInput("Year", "Choose a Year:",
choices = c("2012", "2011")),
downloadButton("downFile", "Download File"),
width = 2),
mainPanel(
tabsetPanel(type = "tabs",
tabPanel("Html Pages", htmlOutput("viewReport"))),
width = 10)
)
)
#IMPORTANT: The two lines below needs to be run just one time unless the token is deleted
# Create Token
token <- drop_auth()
# Save token
saveRDS(token, "droptoken.rds")
token <- readRDS("droptoken.rds")
server <- shinyServer(function(input, output) {
# ---------------------------------------------------
filePutReport <- reactive(
paste(input$Cat, "_", input$Year, "_Doc.html", sep = "")
)
filePutReport2 <- reactive({
# Search if the file exists in DropBox
try({
drop_download(path = paste("shiny_docs/shinydbtest/", filePutReport(), sep = ""),
overwrite = TRUE, local_path = "./www",
dtoken = token)
}, silent = TRUE)
})
# Show Html Pages
output$viewReport <- renderUI({
validate(
need(filePutReport2(), 'Custom error message!'))
tags$iframe(seamless = "seamless", width = "1400", height = "1000",
src = filePutReport()
)
})
###
output$downFile <- downloadHandler(
# generate bins based on input$bins from ui.R
filename = function() {
paste0(filePutReport() )
},
content = function(file){
file.copy(from = paste0("./www/", filePutReport2() ), to = file, overwrite = TRUE)
}
)
})
shinyApp(ui = ui, server = server)