【问题标题】:Can't download docx with R plumber API on Linux无法在 Linux 上使用 R 管道工 API 下载 docx
【发布时间】:2019-03-21 17:10:19
【问题描述】:

我制作了一个管道工 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 上工作-@ 987654321@

【问题讨论】:

  • 这听起来像是浏览器的问题。如果 浏览器 不能处理文件类型,它就不能显示它。无论如何,docx 是一个包含 XML 文件的 zip 包。您可以解压缩文件以检查它,看看它是否在所有操作系统中都包含相同的文件。
  • 您可能应该强制浏览器下载文件,而不是通过将Content-Disposition 标头设置为attachment 来尝试内联显示它,例如使用team$setHeader("Content-Disposition", "attachment; filename=myFile.docx")
  • 谢谢,不过我不确定如何使该命令正常工作。它可以与水管工一起使用吗?它来自一个包裹吗?
  • 这是添加标题的管道工调用。已复制from the plumber tutorials
  • 你是个天才!我不知道为什么我昨天没有找到那个页面,我找了几个小时。非常感谢!我要把正确的代码变成答案。

标签: r plumber


【解决方案1】:

感谢 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2016-10-08
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多