【问题标题】:NiFi- how to http post a PDF documentNiFi-如何 http 发布 PDF 文档
【发布时间】:2019-03-15 11:05:49
【问题描述】:

我想使用 NiFi 的 posthttp/invokeHttp 处理器将 PDF 发布到 API。

但考虑在 NiFi 中复制以下 cURL 请求:

curl -X POST "http://ipaddress:port/api/" -H "accept: application/json" -H 
        "Content-Type: multipart/form-data" -F "pdf_file=@sample.pdf;
        type=application/pdf"

哪个属性获取 nifi 属性中的-F 信息?

invokehttp 现在的配置: 错误: “400 错误请求:浏览器(或代理)发送了此服务器无法理解的请求。”

现在对 posthttp 的配置: 错误: 服务器日志:读取上游时 readv() 失败(104:对等方重置连接)

【问题讨论】:

  • -F curl 参数将文件作为 multipart/form-data 的一部分发送。所以,你必须将你的流文件(PDF)转换成这种格式......这里有简短的描述ec.haxx.se/http-multipart.html

标签: pdf post apache-nifi


【解决方案1】:

在旧版本的 nifi 中,您必须使用自己的脚本来构建多部分请求,然后使用调用来创建发布请求。您可以参考这篇文章以获取 ExecuteGroovyScript 示例。 https://stackoverflow.com/a/57204862

从 Nifi 1.12 开始,您可以通过设置 content-type 直接使用 invokeHTTP https://stackoverflow.com/a/69284300

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

当您使用 PostHttp/InvokeHttp 时,您不会引用外部文件,而是发送流文件的内容。因此,您首先需要使用 GetFile 或 ListFile/FetchFile 将 sample.pdf 带入 NiFi,然后来自这些处理器的流文件代表 PDF,您将该流文件路由到 InvokeHttp,后者将发布流文件的内容(PDF)。

【讨论】:

  • 我已经在 invokehttp 处理器的输入流中有一个 pdf 作为流文件。但它似乎没有按照上述 curl 格式发送 pdf,因此出现内部服务器错误
  • 您能否展示您的 InvokeHttp 处理器配置以及来自 nifi-app.log 的异常堆栈跟踪?
  • 添加了详细信息以供您查看
  • 服务器期望的 Content-Type 是什么?在您的示例 curl 命令中,它具有“Content-Type:multipart/form-data”,在 InvokeHttp 中它具有 ${mime.type},您是否在此处理器之前将 mime.type 设置为 multipart/form-data?否则,mime.type 可能是 application/pdf 或者可能未设置,想知道这是否导致错误请求
  • 不,我在两个处理器中都尝试了所有组合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2015-05-24
  • 2011-08-08
相关资源
最近更新 更多