使用base64编码下载光泽文件(不使用downloadHandler)

时间:2017-09-07 20:23:28

标签: r download shiny base64 uri

我有一个闪亮的应用程序,包含以下主要部分:

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()')
  }
})

此应用程序运作正常:

  • 我点击&#34; Go&#34;生成按钮和pdf文件
  • 此pdf文件已转换为其base64编码
  • 此base64字符串将发送到href代码
  • 的属性<a>
  • 我再次点击按钮(其标签已更新为&#34;下载PDF&#34;),这会触发<a>标记:我的pdf已下载。

现在,我有相同的应用程序,除了代替pdf文件,该应用程序生成一个rmarkdown的html文件。除了下载之外,一切都有效:当我第二次点击按钮时,看起来浏览器会触发&#34;无限下载&#34;:乍一看没有任何反应,但当我关闭浏览器时,它会询问我是否我想取消下载。

我尝试用一​​个小的txt文件替换html文件,下载工作正常。所以似乎问题是html的base64编码。有没有问题因为这个html已经包含了一些base64字符串?或者为什么?我还尝试使用httpuv::encodeURIcomponent对文件进行编码,但同样的问题也出现了。我怎么能以这种方式下载HTML?

0 个答案:

没有答案