【问题标题】:Shiny DownloadHandler not working on server闪亮的 DownloadHandler 在服务器上不起作用
【发布时间】:2021-12-22 03:05:31
【问题描述】:

我是新来的,我对 Shiny Apps(或一般的应用程序、网站和服务器)没有太多经验。我的应用程序有效(也在服务器上)。只有下载按钮生成报告并在服务器上保存文件(报告副本和excel文件)。我还尝试将报告复制到临时文件。但这对我也不起作用。有谁知道我该如何解决这个问题? 该应用程序存储在以下路径:/data/web/www/vhost/myapp.com/

我想将报告的副本保存在子文件夹 (/data/web/www/vhost/myapp.com/reports) 中,并将数据集保存在另一个子文件夹 (/data/web/www/vhost/myapp.com) 中/数据集)。在本地,我可以使用 setwd 实现这一目标。

output$dokumentationsbericht <- downloadHandler(
filename = function(){paste("Bericht_", input$skz, "_", input$monat, ".pdf", sep='')},    
content = function(file) {
cat(c(report_yaml, sep="\n"),
c(überschrift2, sep="\n"),
c(print({paste("_**Name des SQM: **_", input$sqm)}), sep="\n"),
          
c(überschrift3, sep="\n"),
c(print(pandoc.table.return(data(), style="multiline", split.tables=170)), sep="\n"),
c(newPage, sep="\n"),
c(überschrift4, sep="\n"),
c("_**Welche inhaltlichen Schwerpunkte wurden in diesem Monat gesetzt?**_", sep="\n"), 
        
sep="\n", file= paste("Bericht_", input$skz, "_", input$monat, ".Rmd", sep=''))
      
report_path <- tempfile(fileext = ".Rmd")
file.copy(paste("Bericht_", input$skz, "_", input$monat, ".Rmd", sep=''), report_path, overwrite = TRUE)
        
rmarkdown::render(report_path, 
output_file = file,
envir = new.env(parent = globalenv()))
})

【问题讨论】:

  • 您的代码不像一个完整的闪亮应用程序。尝试使用绝对文件路径而不是setwd 来访问文件。
  • 感谢您的提示。我试了一下,发现路径显然没有正确读取。反斜杠总是转换为下划线。我知道我必须输入两个反斜杠才能得到一个。但结果是两个下划线。我也尝试过正斜杠。结果相同。

标签: r shiny shiny-server


【解决方案1】:
  • cat 仅打印内容但不将其分配给变量(尝试测试cat("foo") -&gt; foo)
  • 我建议使用模板,例如stringr::str_glue
  • 函数downloadHandler 的参数content 是一个带有参数file 的函数。然后该函数会将内容写入到 file 变量中闪亮设置的文件路径
library(shiny)
library(tidyverse)

report_yaml <- "Test: foo"
überschrift2 <- "Title"
input <- list(
  skz = "foo",
  monat = "Jan",
  sqm = "bar"
)

template <- "
{report_yaml}

{überschrift2}
Name des SQM: {input$sqm}
"

output$dokumentationsbericht <- downloadHandler(
  filename = function(){paste("Bericht_", input$skz, "_", input$monat, ".pdf", sep='')},    
  content = function(file) {
    str_glue(template) %>%
      write_file(file)
  }
)

【讨论】:

  • 带有 cat 的下载处理程序在本地工作,因此我可以下载 pdf。但是你认为 cat 在我的服务器上不起作用?不幸的是,您的代码对我不起作用。
  • 对不起,我监督了 cat 的 file 参数。由于文件名将由 Shiny 调用content 提供的函数来确定(并且随着时间的推移而改变,并且不包含诸如 Bericht_ 之类的词),因此您应该改写 cat("foo", file = file)
  • 我的代码是一种灵感,并不是一个完全独立的闪亮应用程序
  • 猫不是问题。它按预期创建一个 Rmd 文件。我读到有时您必须将文件复制到临时文件中。我尝试过这个。我的文件出现在临时文件中。但我无法访问该文件夹。所以也许这就是问题所在?!我该如何改变呢?
  • 运行闪亮应用程序的用户(你、闪亮服务器等)是否具有对该目录的写入权限?
猜你喜欢
  • 2018-08-02
  • 2014-07-28
  • 2017-10-23
  • 2016-02-23
  • 2019-01-31
  • 1970-01-01
  • 2014-12-16
  • 2016-12-28
  • 1970-01-01
相关资源
最近更新 更多