通过闪亮服务器中的接收器功能保存文件?

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

【讨论】:

以上是关于通过闪亮服务器中的接收器功能保存文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过multer上传保存在内存中的文件到另一个API

通过 ObjectOutputStream 发送文件,然后将其保存在 Java 中?

如何保存在闪亮的应用程序中制作的图

iOS中加密-发送-保存-接收文件

闪亮的DT编辑保存在错误的列中

闪亮的 DownloadHandler 在服务器上不起作用