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

Posted

技术标签:

【中文标题】闪亮的 DownloadHandler 在服务器上不起作用【英文标题】:Shiny DownloadHandler not working on server 【发布时间】: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 来访问文件。 感谢您的提示。我试了一下,发现路径显然没有正确读取。反斜杠总是转换为下划线。我知道我必须输入两个反斜杠才能得到一个。但结果是两个下划线。我也尝试过正斜杠。结果相同。 【参考方案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 文件。我读到有时您必须将文件复制到临时文件中。我尝试过这个。我的文件出现在临时文件中。但我无法访问该文件夹。所以也许这就是问题所在?!我该如何改变呢? 运行闪亮应用程序的用户(你、闪亮服务器等)是否具有对该目录的写入权限?

以上是关于闪亮的 DownloadHandler 在服务器上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 RShiny 中,当 downloadHandler 中缺少预期文件时,使用 renderPrint/renderText 显示错误

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

UnityWebRequest.downloadHandler.text为空,尽管POST方法返回响应

无法在闪亮的服务器上部署闪亮的应用程序

闪亮的应用程序无法在闪亮的服务器上启动

如何安排闪亮的模块文件,以便它们在闪亮的服务器上运行?