【问题标题】:NiFi PutFile set filename dosen't workingNiFi PutFile 设置文件名不起作用
【发布时间】:2019-01-22 09:43:49
【问题描述】:
  1. 通过 Kafka 代理获取 JSON 数据。
  2. 数据格式如下,图片数据编码为Base64。 例如){"filename":"test.jpg","filedata":"/9j/4AAQSkZJRgABAQEAYABgA....."}
  3. 我想将通过 Kafka 收到的图像数据保存为文件。
  4. 但是,它无法正常工作。

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

  1. 使用Kafka_2_0处理器

  2. 评估JsonPath 处理器

    目标流文件内容

    原始字节 $.filedata

  3. EvaluateJsonPath 处理器(错误:没有有效的 JSON 内容)

    目标流文件属性

    文件名 $.filename

  4. Base64Encode 内容处理器

  5. PutFile 处理器

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

你有什么网站或例子可以参考吗?

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

【问题讨论】:

  • 你试图解决什么?

标签: apache-nifi


【解决方案1】:

根据PutFile 文档:

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

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

【讨论】:

【解决方案2】:

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

我想出了一个可以满足这个要求的流程,并且是不言自明的。

  1. ConsumeKafkaRecord_2_0(使用 {"filename":"test.jpg","filedata":"/9j/4AAQSkZ.."})
  2. 评估JsonPath
    目的地:流文件属性
    原始类型:$.filedata
    文件名:$.filename
  3. ReplaceText(将流文件内容更改为下一个处理器的编码图像内容)
  4. Base64EncodeContent(原始类型由该处理器解码为图像)
  5. UpdateAttribute(此处更新存储图像的文件名)
  6. 放置文件

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

评估JSONPath

ReplaceText - (注意替换值)

更新属性

【讨论】:

    【解决方案3】:

    在第 2 步中,您已将流文件内容替换为不再是 JSON 的 $.filedata 的值,因此您不能在第 3 步中使用 EvaluateJsonPath,因为没有更多的 JSON。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多