0

我制作了一个管道工 API,如下所示:

#* @serializer contentType list(type="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
#* @get /word
function(team){
  tmp <- tempfile()

  render("test.Rmd", tmp, output_format = "word_document",
         params = list(team = team))

  readBin(tmp, "raw", n=file.info(tmp)$size)
}

在本地运行它在 Windows 上运行良好,生成一个 docx 文件供下载。如果您在 Linux 上本地运行它并使用 Firefox,它似乎也可以正常工作,尽管它似乎在尝试打开或下载 docx 文件时使 Firefox 崩溃。

但是在 Linux 上本地运行并通过 Chrome 下载会产生操作系统无法识别的二进制文件。如果您选择“使用...打开... Libre Office Writer”,文件可以正常打开,但我确实需要我的用户获取格式正确的文件,该文件将自动打开。

我无法弄清楚问题是浏览器还是操作系统。任何帮助表示赞赏。

所有代码都在这个存储库中,正如我所说的在 Windows 中一切正常,所以我实际上认为它对其他人来说是一个有用的参考,但现在我无法让它在 Linux 上工作——这里

4

1 回答 1

0

多亏了 Panagiotis,这是代码

#* @serializer contentType list(type="application/octet-stream")
#* @get /word
function(team, res){

  res$setHeader("Content-Disposition", "attachment; filename=report.docx")

  tmp <- tempfile()

  render("test.Rmd", tmp, output_format = "word_document",
         params = list(team = team))

  readBin(tmp, "raw", n=file.info(tmp)$size)
}
于 2019-03-22T08:37:04.090 回答