R Shiny DownloadHandler + base64解码

时间:2018-08-12 15:41:13

标签: r encoding shiny

我喜欢下载由base64enc::base64decode创建的闪亮文件。

到目前为止,我有:

library(base64enc)
library(shiny)
downloadHandler(
  filename = function()
    "test.txt",
  content = function(file) {
    base64decode(what = "VGhpcyBpcyBhIHRlc3Qu", output = file)
  }
)

我得到Warning: Error in file: argument "file" is missing, with no default

当我使用base64decode而没有光泽时,我使用:

base_string <- "VGhpcyBpcyBhIHRlc3Qu"
o_file <- file("C:/User/Desktop/test.txt"), "wb")
base64decode(what = base_string, output = o_file)
close(o_file)

,一切正常。

是否可以在不先执行第二条语句的情况下使用downloadHandler?我想为下载创建文件。

1 个答案:

答案 0 :(得分:0)

如果我们查看?downloadHandler的文档,就会发现content参数需要a file path (string) of a nonexistent temp filewrites the content to that file path

如果我们查看base64decode的代码:

if (is.character(output)) {
    output <- file(output, "wb")
    on.exit(close(output))
}

我们看到调用了file(),因此您已经创建/打开了到文件的连接,并且该文件“不存在”的条件无法满足(我的理解)。 / p>

也许,您可以像这样使用smthg:

write.csv(base64decode(what = base_string), file)

完整应用:

library(base64enc)
library(shiny)
ui <- fluidPage(
  downloadLink("downloadData", "Download")
)

server <- function(input, output) {
  # Our dataset
  data <- mtcars

  output$downloadData <- downloadHandler(
    filename = function() {
      paste("data-", Sys.Date(), ".stackoverflow", sep="")
    },
    content = function(file) {
      base_string <- "VGhpcyBpcyBhIHRlc3Qu"
      write.table(base64decode(what = base_string), file)
    }
  )
}

shinyApp(ui, server)

编辑:在评论中给出您的问题。您可以将write.table()用于任意文件类型。请参见上面的编辑示例,以写入.stackoverflow类型的文件。)