我有一个外部程序,一个电子书转换器,将.epub转换为.txt . 这个转换器请求一个文件作为输入,另一个文件作为输出,文件名在这里很重要,因为扩展用于确定应该进行哪个转换,也是从我在测试时看到的,程序在输入文件上执行搜索 . 因此,这些禁令阻止使用命名管道或SDTIN重定向 .
对于另一个项目,或者至少是一个POC,我将必须封装一个现有的工具包,其工作方式与上面相同,并重新创建Nifi之间的工作流程 .
从短期来看,编写自定义处理器是不可能的 .
那我该怎么办呢?
以下是我发现的几种可能的解决方案:
-
创建一个PutFile处理器,将文件放在临时位置,用executeStreamCommand链接它,执行外部命令并将输出放在临时位置并用fetchFileProcessor链接 . 但这里的问题可能是我必须找到一种清理临时文件的方法 .
-
另一个解决方案是创建一个与ExecuteScript一起使用的脚本来执行以下操作:使用基于属性的文件名将流文件写入磁盘,执行外部命令,将输出文件读取到流文件并执行一些清理 . 但是从我发现的情况来看,从这个处理器写入磁盘并不容易,对吧?
那么我应该走哪条路,有什么建议吗?
1 回答
你走在正确的轨道上 . 我想你可以做一系列处理器,如下所示:
UpdateAttribute - 为输入和输出文件名创建属性 .
PutFile - 写入临时输入文件 .
ExecuteProcess - 运行转换实用程序 . 我建议将其包装在shell脚本中,这样您就可以在完成后清理临时输入文件 .
FetchFile - 将转换输出读入FlowFile内容 . 使用
Delete File
的Delete File
来清理转换后的文件 .