闪亮的 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") -> 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 显示错误