2014-05-12 14 views
8

Ich habe eine statische PDF-Datei in meinem Ordner www, die ich auf eine UI downloadButton() verknüpfen möchte. Es scheint, dass die serverseitige downloadHandler die content Option benötigt, um befüllt zu werden, und für reaktiv produzierte Ausgabe gedacht ist.R: Shiny DownloadButton für statischen Inhalt

Ich weiß, dass ich mit statischen HTML-Tags, tags$a('Download file.', href = 'foo.pdf') auf der UI-Seite verknüpfen kann.

Irgendwelche Vorschläge, wie man die zwei zusammensetzt, wird hilfreich sein.

Antwort

7

Ich vermute, Sie wollen nur eine Schaltfläche angezeigt werden? Sie können class = 'btn' zu Ihrem Anker hinzufügen. Hier ist ein Beispiel, das mit und ohne zeigt.

library(shiny) 
runApp(list(
    ui = bootstrapPage(
    numericInput('n', 'Number of obs', 100), 
    plotOutput('plot'), 
    tags$a(href = 'foo.pdf', class = "btn", icon("download"), 'Download file.'), 
    tags$a('Download file2.', href = 'foo2.pdf'), 
    downloadButton('downloadData', 'Download') 
), 
    server = function(input, output) { 
    output$plot <- renderPlot({ hist(runif(input$n)) }) 
    output$downloadData <- downloadHandler(
     filename = function() { 
     paste('data-', Sys.Date(), '.csv', sep='') 
     }, 
     content = function(con) { 
     write.csv(data, con) 
     } 
    ) 

    } 
)) 

Um ein Symbol wie die shiny Funktion hinzufügen downloadHandler zum fontawesome Bibliothek beziehen hat. Zum Beispiel Hier ist das Symbol die glänzende Funktion verwendet http://fontawesome.io/icon/download/. Shiny hat eine Wrapper-Funktion icon, die diese Symbole enthält.

pic showing btn with icon

+0

Hmm, sind die Tasten nicht so schön wie der 'downloadButton' gestylt. Gibt es eine Möglichkeit, die richtige Klasse herauszufinden, die für diese gilt? – tchakravarty

+0

@fgnu Shiny verwendet die Schriftart awesome library für seine Symbole. Shiny hat eine Symbolfunktion, die als Wrapper für diese Bibliothek dient. Ich habe das Beispiel aktualisiert, um es mit der Klasse zu vergleichen, die zum Anchor-Tag hinzugefügt wurde, ohne die Klasse und den generischen glänzenden DownloadHandler. – jdharrison

+0

Super, danke. – tchakravarty

5

Kann dies helfen:

content = function(file) { 
 
    file.copy('www/foo.pdf', file) 
 
}

+0

Dies funktioniert. Bitte beachten Sie, dass die Variablendatei und 'www/foo.pdf' nicht identisch sind, andernfalls wird 'www/foo.pdf' überschrieben. – zhanxw

1

Im Zusammenhang mit ui.R und server.R:

ui.R

downloadButton(
    "statFile", 
    "Download static file" 
) 

server.R

output$statFile <- downloadHandler(
    filename="example.txt", # desired file name on client 
    content=function(con) { 
     file.copy("file_name_on_server", con) 
    } 
)