问题:如何使用存储在OpenCPU服务器上的输出文件作为其他功能的输入?
背景
我正在尝试在openCPU中使用knitr
和markdown
来生成html,我可以用它来更新网页,其中包含有关页面加载的统计信息。
基本工作流程如下:
knit
功能将该功能转换为存储在服务器上的* .md文件。markdownToHTML
函数(通过调用knit
调用生成的相应哈希值)并接收包含生成的HTML的AJAX回复。目前,我已经完成了第4步的过程。我可以通过表单请求POST调用knit
传入.Rmd文件,我收到OpenCPU的以下回复:
{
"object" : "xa9eaea44e1",
"graphs" : [
"xf31dcfe7f3"
],
"files" : {
"figure" : "xfc55396fd8",
"test.md" : "x7821c69f79"
}
}
其中"test.md"
是通过knit
函数生成的输出文件。现在,我尝试使用哈希(在本例中为"x7821c69f79"
,使用以下参数POST /R/pub/markdown/markdownToHTML/ascii
:
file /R/tmp/x7821c69f79/bin
这会返回HTTP 400
错误,并显示以下消息:
cannot open URL 'http://localhost/R/store/R/tmp/x7821c69f79/bin/rds'
但是,当我向/R/tmp/x7821c69f79/bin
发出GET请求时,会返回test.md
的内容。所以我知道在knit
的调用中正确存储了文件。
那么,这里发生了什么?换句话说,如何使用存储在OpenCPU服务器上的输出文件作为另一个函数的输入?
答案 0 :(得分:2)
Hmz /store
错误看起来像个错误,我会调查一下。
也许在第3步中,您可以让函数返回test.md
的内容,例如以return(readLines(test.md))
结尾?或者更好的是,不要输出到test.md
而是输出到tmpfile()
并返回其内容。这样输出存储为存储中的R对象,而不是原始文件,您只需传递参数,例如:步骤4中file=x7821c69f79
。
你看过markdown example app了吗?请参阅来源here和here。