Сохранить файл с помощью функции приемника на блестящем сервере? - PullRequest
0 голосов
/ 17 октября 2018

У меня блестящее приложение для генерации файла .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 Ответ

0 голосов
/ 18 октября 2018

Ваша 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()
    })
}
...