NiFi PutFile设置的文件名无效

时间:2019-01-17 09:09:52

标签: apache-nifi

  1. 通过Kafka代理获取JSON数据。
  2. 数据采用以下格式,并且图像数据已编码为Base64。 例如:{"filename":"test.jpg","filedata":"/9j/4AAQSkZJRgABAQEAYABgA....."}
  3. 我想将通过Kafka接收到的图像数据保存为文件。
  4. 但是,它不能正常工作。

下面是我编写流程的顺序,仅描述了关键设置。

  1. ConsumeKafka_2_0处理器

  2. 评估JsonPath处理器

    目标流文件内容

    原始字节$ .filedata

  3. EvaluateJsonPath Processor(错误:没有有效的JSON内容)

    目标流文件属性

    文件名$。文件名

  4. Base64EncodeContent处理器

  5. PutFile处理器

执行流程时,图像文件可以正常保存,但是无法设置文件名。我该怎么办?

您有任何要引用的网站或示例吗?

参考站点是https://community.hortonworks.com/articles/218015/ingesting-binary-files-like-pdf-jpg-png-to-hbase-w.html

3 个答案:

答案 0 :(得分:1)

根据PutFile文档:

  

读取属性filename:将FlowFile写入磁盘时要使用的文件名。

您只需要使用UpdateAttribute处理器来设置filename属性的值

答案 1 :(得分:0)

在步骤2中,您已将流文件内容替换为不再是JSON的$​​ .filedata值,因此在步骤3中您将无法使用EvaluateJsonPath,因为不再有JSON。

如果将步骤2和3颠倒过来,则可以将文件名提取到属性中,并且流文件内容中仍具有原始JSON,然后将文件数据提取到内容中。

答案 2 :(得分:0)

从问题中我了解到有一个kafka主题,其中包含json格式的文件名和base64编码的文件内容;您想使用kafka主题,使用Base64解码文件内容以构建图像,然后使用PutFile将图像存储在文件名中。

我想出了一个可以满足此要求的流程,并且可以自我解释。

  1. ConsumeKafkaRecord_2_0(消耗{“ filename”:“ test.jpg”,“ filedata”:“ / 9j / 4AAQSkZ ..”})
  2. EvaluateJsonPath
      目的地:flowfile-attribute
      原始类型:$ .filedata
      文件名:$ .filename
  3. ReplaceText(将流文件内容更改为下一个处理器的编码图像内容)
  4. Base64EncodeContent(此处理器将原始类型解码为图像)
  5. UpdateAttribute(用于存储图像的文件名在此处更新)
  6. PutFile

无法在此处上传流程模板。发布关键处理器截图

EvaluateJSONPath

enter image description here

替换文本-(注释替换值)

enter image description here

UpdateAttribute enter image description here