2017-02-20 5 views
0

Ich implementiere einen Download-Link mit Shiny.onInputChange, die eine Nachricht vom Client zum Server sendet. Der Server wird die Nachricht verwenden, um eine neue Datei zu generieren und anschließend dem Benutzer zum Herunterladen bereitzustellen. downloadHandler kann eine Schaltfläche erstellen, um eine Datei vom Server herunterzuladen, kann jedoch keine Nachricht vom Client empfangen.Datei herunterladen auf Shiny.onInputChange

Die Shiny.onInputChange kann von observeEvent erfasst werden.

Meine Frage ist, wie Sie die Download-Funktion in observeEvent implementieren.

Im Folgenden finden Sie einige Beispielcodes für Shiny.onInputChange. Danke für Anregungen.

library(shiny) 

ui <- shinyUI(
    fluidPage(
     HTML('<a href="#" onclick=\'Shiny.onInputChange("i_download", [1,Math.random()]);\'>Download</a>') 
    ) 
) 

server <- function(input, output, session) { 
    observeEvent(input$i_download, { 
     rep(input$i_download[1]) 
     # codes to generate a new file and download it 
    }) 
} 


shinyApp(ui = ui, server = server) 
+0

Und, was ist die Frage? – Jean

Antwort

1

Ich denke, Sie können die Nachricht mit downloadHandler empfangen. Dies entspricht Ihrer Anfrage:

library(shiny) 

ui <- fluidPage(
    downloadLink('down', onclick='Shiny.onInputChange("i_download", [1,Math.random()]);') 
    # for shiny 0.14.2 or lower use this instead: 
    # tagAppendAttributes(downloadLink('down'), onclick='Shiny.onInputChange("i_download", [1,Math.random()]);') 
) 

server <- function(input, output, session) { 

    output$down <- downloadHandler(

    filename = 'down.txt', 

    content = function(file) { 

     # use the message (input$i_download) to generate a new file 

     writeLines(as.character(input$i_download), file) 

    } 
) 
} 

shinyApp(ui = ui, server = server) 
+0

so kann es nicht reproduziert werden, da es zu: unbenutztem Argument führt (onclick = "Shiny.onInputChange (\" i_download \ ", [1, Math.random()]);") '. – BigDataScientist

+0

@BigDataScientist Ich benutze glänzend 1.0.0. Es fügte ein '...' Argument zu 'downloadLink()' und 'downloadButton' hinzu – Yang

+0

oh, ich war nicht auf dem Paket aktuell. Ich war mir bewusst, dass das Onclick-Argument es nur für den DownloadLink nicht wusste. Vielen Dank @Yang! – BigDataScientist