通过闪亮服务器中的接收器功能保存文件?
Posted
技术标签:
【中文标题】通过闪亮服务器中的接收器功能保存文件?【英文标题】:Save a file via sink function in shiny server? 【发布时间】:2018-10-17 15:41:23 【问题描述】:我有一个闪亮的应用程序来生成一个.txt
文件以供下载。
此外,我想保留用户在我的闪亮服务器中生成的文件的副本。
服务器功能如下:
server <- function(input, output, session)
data_gen <- reactive(
d1= data.frame(...)
d2= data.frame(...)
result <- list(d1=d1, d2=d2)
return(result)
)
create_file <- reactive(
sink("/srv/shiny-server/S3/file.txt",append = TRUE)
print(data_gen()$d1)
print(data_gen()$d2)
sink()
)
output$downloadData <- downloadHandler(
filename = function() "input.txt",
content = function(file)
sink(file,append = TRUE)
print(data_gen()$d1)
print(data_gen()$d2)
sink()
)
我可以下载数据,但应用程序对create_file
函数没有反应,也没有将副本写入闪亮的服务器。
任何想法我该如何解决这个问题?
【问题讨论】:
【参考方案1】:你的create_file
函数是一个反应式的。反应函数仅在 1) 需要其输出和 2) 其输入已更改时进行评估。两者似乎都不适用于这里。
您可以做的是将create_file
的内容移动到您的下载处理程序中。 content
必须接收一个返回文件的函数,但该函数可以先做其他事情。所以尝试以下方法:
server <- function(input, output, session)
data_gen <- reactive(
d1= data.frame(...)
d2= data.frame(...)
result <- list(d1=d1, d2=d2)
return(result)
)
output$downloadData <- downloadHandler(
filename = function() "input.txt",
content = function(file)
# save non-user copy
sink("/srv/shiny-server/S3/file.txt",append = TRUE)
print(data_gen()$d1)
print(data_gen()$d2)
sink()
# copy to be returned for user
sink(file,append = TRUE)
print(data_gen()$d1)
print(data_gen()$d2)
sink()
)
【讨论】:
以上是关于通过闪亮服务器中的接收器功能保存文件?的主要内容,如果未能解决你的问题,请参考以下文章