【问题标题】:NiFi InvokeHttp: How to send multiple files with multipart/form-data without ExecuteGroovyScriptNiFi InvokeHttp:如何在没有 ExecuteGroovyScript 的情况下使用 multipart/form-data 发送多个文件
【发布时间】:2021-05-14 12:47:45
【问题描述】:

通常,当我必须将带有 multipart/form-data 的多个文件发布到 RestAPI-Server 时,我使用的是 ExecuteGroovyScript,如下所述:

http://apache-nifi-users-list.2361937.n4.nabble.com/POST-multipart-form-data-with-Invokehttp-td9374.html

现在,我的 NiFi 流程应该在不同的服务器上运行,我得到:

'GroovyScript' is invalid because ... unresolved dependency: org.apache.httpcomponents#httpmime

我没有此 NiFi 服务器的管理员权限,也无法更改 NiFi 配置,因此无法修复 GroovyScript 错误

问题: 是否可以仅使用 InvokeHttp-Processor 发送具有 multipart/form-data 的多个文件?

(未通过 Google 找到任何可行的解决方案)

周末愉快

弗兰克

【问题讨论】:

  • 最新的 NiFi InvokeHTTP 处理器以有限的方式支持多部分/表单数据请求。特别是我认为我们只能在这样的请求中发送一个流文件和多个属性。见:issues.apache.org/jira/browse/NIFI-7394

标签: groovy multipartform-data apache-nifi rest


【解决方案1】:

如果您有 NiFi 策略访问受限组件(需要“执行代码”),则有一种方法可以让 Groovy 脚本处理器在没有 管理员访问此 NiFi 的情况下工作-服务器(假设您指的是操作系统级别的访问权限)。

幸运的是,您引用的 Groovy 脚本所需的 JAR 与 NiFi 捆绑在一起,并且流可以根据需要访问它们。您应该能够通过将 ExecuteGroovyScript 处理器的 Additional classpath 属性设置为类似:${nifi.nar.working.directory}/framework/nifi-framework-nar-1.11.4.nar-unpacked/NAR-INF/bundled-dependencies/httpcore-4.4.9.jar;${nifi.nar.working.directory}/extensions/nifi-slack-nar-1.11.4.nar-unpacked/NAR-INF/bundled-dependencies/httpmime-4.5.7.jar

这里,nifi.nar.working.directory 是一个 NiFi 变量,设置为与 nifi.properties 文件中的值相同的值。 注意:如果您不使用 NiFi 1.11.4,则需要更改此示例中的版本信息。

解释: NiFi 框架包含org.apache.http.entity.ContentType 类。几个 NiFi 扩展包括 org.apache.http.entity.mime.MultipartEntityBuilder 类:media(具有最新的 JAR 版本,但当前未与 NiFi 分发捆绑); slack(具有下一个最新的 JAR 版本);和solr

警告:这种方法很脆弱,因为它会在 NiFi 升级期间中断。防止这种情况的一种方法是使用 NiFi 流获取两个 JAR 文件并将它们放置到升级期间将保留的位置。然后 ExecuteGroovyScript 处理器的 Additional classpath 属性将引用这个保留的位置。 (您需要 NiFi 策略,访问受限组件(需要“写入文件系统”)才能创建此流程。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多