【问题标题】:NiFi InvokeHttp: How to send multiple files with multipart/form-data without ExecuteGroovyScriptNiFi InvokeHttp:如何在没有 ExecuteGroovyScript 的情况下使用 multipart/form-data 发送多个文件
【发布时间】:2021-05-14 12:47:45
【问题描述】:
【问题讨论】:
标签:
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 策略,访问受限组件(需要“写入文件系统”)才能创建此流程。)