Превращение ошибки конфликта данных (409) в сообщение, которое могут понять клиенты - PullRequest
0 голосов
/ 10 октября 2019

Я относительно новичок в использовании R и блестящий. В настоящее время я получаю сообщение об ошибке: конфликт (HTTP 409) при попытке доступа к html-файлу из Dropbox, и это нормально, я знаю причину. Проблема, с которой я сталкиваюсь, - это попытка найти способ изменить сообщение с кодом ошибки.

Я пробовал несколько форм проверки и попытки отлова.

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

    drop_download(path = paste("shiny_docs/shinydbtest/", filePutReport(), sep = ""),
                  overwrite = TRUE, local_path = "./www",
             dtoken = token)

      filePutReport()
  })

  # Show Html Pages

  output$viewReport <- renderUI({

    tags$iframe(seamless = "seamless", width = "1400", height = "1000",

                src = filePutReport2()
                )
  })

  ###
  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)

Вместопросто «Ошибка: конфликт (HTTP 409)», я хотел бы сообщение, которое клиент мог бы понять. Любые и все предложения приветствуются. Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 11 октября 2019

В моем текущем окружении я не могу установить соединение с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...