Nifi multipart form

守給你的承諾、 提交于 2020-05-09 02:41:07

问题


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.

I’m trying to use invokehttp. Is there a way to build the multiple form data before I put it into invokehttp?


回答1:


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

check the other add* methods to add multipart parameters: org.apache.http.entity.mime.MultipartEntityBuilder


To check this code I used InvokeHTTP processor just after ExecuteGroovyScript with only following parameters changed:

  • HTTP Method: POST
  • Remote URL: http://httpbin.org/post



回答2:


If you set a dynamic property on the InvokeHTTP processor with the name Content-Type and the value multipart/form-data, what is the error you get? By specifying the dynamic property, it will send that as a header Content-Type: multipart/form-data.

InvokeHTTP will simply send the flowfile content as the request body. What is the remote endpoint expecting for input, and how does this differ from what you are currently able to send?



来源:https://stackoverflow.com/questions/57122809/nifi-multipart-form

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!