我喜欢下载由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?我想为下载创建文件。
答案 0 :(得分:0)
如果我们查看?downloadHandler
的文档,就会发现content参数需要a file path (string) of a nonexistent temp file
和writes 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
类型的文件。)