Nifi多部分形式

时间:2019-07-20 07:52:55

标签: apache-nifi

我正在尝试将一个很简单的多部分表单发布到api。我在apache Nifi中看不到任何方法,因为它似乎只有一个表单数据输入。在这里和Nifi论坛上似乎有很多关于此的现有问题,但是它们都没有任何答案。

我正在尝试使用invokehttp。在我将其放入invokehttp之前,是否可以构建多种表单数据?

2 个答案:

答案 0 :(得分:1)

您可以结合使用ExecuteGroovyScript处理器和以下代码来构建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


要检查此代码,我在InvokeHTTP之后使用ExecuteGroovyScript处理器,仅更改了以下参数:

答案 1 :(得分:0)

如果在InvokeHTTP处理器上设置名称为Content-Type且值为multipart/form-data动态属性,您将得到什么错误?通过指定动态属性,它将作为标头Content-Type: multipart/form-data发送。

InvokeHTTP只会将流文件内容作为请求正文发送。远程端点希望输入什么,这与您当前能够发送的输入有何不同?