Nifi 多部分形式 [英] Nifi multipart form
问题描述
我正在尝试将一个非常简单的多部分表单发布到 api.我在 apache Nifi 中看不到任何这样做的方法,因为它似乎只有一个表单数据输入.在这里和 Nifi 论坛上似乎有很多关于此的现有问题,但没有一个有任何答案.
I’m trying to do a very simple multipart form post to an api. I can’t see any way of doing this in apache Nifi since it only seems to have one input for form data. There seem to be a lot of existing questions about this on here and the Nifi forum but none of them have any answers.
我正在尝试使用 invokehttp.有没有办法在将多个表单数据放入invokehttp之前构建它?
I’m trying to use invokehttp. Is there a way to build the multiple form data before I put it into invokehttp?
推荐答案
您可以使用带有以下代码的 ExecuteGroovyScript
处理器来构建 multipart/form-data:
You could use ExecuteGroovyScript
processor with the following code to build multipart/form-data:
@Grab(group='org.apache.httpcomponents', module='httpmime', version='4.5.9')
import org.apache.http.entity.mime.MultipartEntityBuilder
import org.apache.http.entity.ContentType
def ff = session.get()
if(!ff)return
def multipart
ff.write{streamIn, streamOut->
multipart = MultipartEntityBuilder.create()
//specify multipart entries here
.addTextBody( "username", ff.filename ) //get from flowfile attribute "filename"
.addTextBody( "secret", new File("./README").getText("UTF-8") ) //add text body from file
.addBinaryBody( "avatar", streamIn, ContentType.DEFAULT_BINARY, ff.filename ) //add flowfile content as binary body
.build()
multipart.writeTo(streamOut)
}
//set the `mime.type` attribute to be used as `Content-Type` in InvokeHTTP
ff."mime.type" = multipart.getContentType().getValue()
REL_SUCCESS << ff
检查其他 add*
方法以添加多部分参数:org.apache.http.entity.mime.MultipartEntityBuilder
check the other add*
methods to add multipart parameters: org.apache.http.entity.mime.MultipartEntityBuilder
为了检查这段代码,我在 ExecuteGroovyScript
之后使用了 InvokeHTTP
处理器,只更改了以下参数:
To check this code I used InvokeHTTP
processor just after ExecuteGroovyScript
with only following parameters changed:
- HTTP 方法:POST
- 远程网址:http://httpbin.org/post
这篇关于Nifi 多部分形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!