我有一个闪亮的应用程序,包含以下主要部分:
ui.R
actionButton("go", "Go")
tags$a("download")
server.R
observe({
if(input$go==1){
[... stuff generating a pdf file myfile.pdf ...]
base64_pdf <- base64enc::dataURI(file="myfile.pdf", mime="application/pdf")
updateActionButton(session, "go", "Download PDF")
shinyjs::runjs(sprintf('$("#download").attr("href", "%s").attr("download", "myfile.pdf")', base64_pdf))
}
if(input$go==2){
shinyjs::runjs('$("#download")[0].click()')
}
})
此应用程序运作正常:
href
代码<a>
<a>
标记:我的pdf已下载。现在,我有相同的应用程序,除了代替pdf文件,该应用程序生成一个rmarkdown
的html文件。除了下载之外,一切都有效:当我第二次点击按钮时,看起来浏览器会触发&#34;无限下载&#34;:乍一看没有任何反应,但当我关闭浏览器时,它会询问我是否我想取消下载。
我尝试用一个小的txt文件替换html文件,下载工作正常。所以似乎问题是html的base64编码。有没有问题因为这个html已经包含了一些base64字符串?或者为什么?我还尝试使用httpuv::encodeURIcomponent
对文件进行编码,但同样的问题也出现了。我怎么能以这种方式下载HTML?