Я пытаюсь отправить запрос multipart / form-data в POST API, используя процессор InvokeHTTP от Nifi.Этот запрос занимает JSON и файл.Заголовки запроса и тело запроса в POSTMAN выглядят примерно так -
POST /delivery/deliverPackage
User-Agent: PostmanRuntime/7.6.1
Accept: */*
Host: example.hostname:port
accept-encoding: gzip, deflate
content-type: multipart/form-data; boundary=--------------------------161413078116998145311888
content-length: 1115
json={ "destinationProtocol" : "HL7", "destinationFormat": "HL7_V2_ORU", "destinationType": "example", "destinationConnectionParams":{ "URI": "example", "HOST": "example", "PORT": "example" } }file=[object Object]
, где объект файла содержит сведения о файле, которые я пытаюсь отправить.
Я хочу отправить эту multipart / формузапрос данных в нифи.Основываясь на ответе, который я видел на одном из форумов (извините, у меня нет ссылки на него), я пытаюсь создать это тело запроса в содержимом потокового файла с использованием процессора ReplaceText перед отправкой потокового файла на процессор InvokeHttp.Содержимое потокового файла выглядит примерно так -
POST /delivery/deliverPackage
User-Agent: curl/7.46.0
Accept: */*
Host: example.hostname:port
accept-encoding: gzip, deflate
content-type: multipart/form-data; boundary=--------------------------161413078116998145311888
content-length: 1115
--------------------------161413078116998145311888
Content-Disposition: form-data; json="{ "destinationProtocol" : "HL7", "destinationFormat": "HL7_V2_ORU", "destinationType": "example", "destinationConnectionParams":{ "URI": "example", "HOST": "example", "PORT": "example" } }"
anonymous
--------------------------161413078116998145311888
Content-Disposition: form-data; name="file"; filename="/path/to/file/in/localsystem.HL7”
Content-Type: text/plain
contents of the file
--------------------------161413078116998145311888--
Хотя, похоже, это не работает, мне это не кажется правильным.Я довольно новый для Нифи.Может ли кто-нибудь помочь мне понять, что я делаю неправильно, или дать несколько советов о том, как справиться с этим правильно?Спасибо!
Вместо этого я попытался использовать процессор ExecuteStreamCommand, чтобы просто запустить команду curl с аргументами команды -
-X POST;"https://example.hostname:port/delivery/deliverPackage?json=%7B%20%22destinationProtocol%22%20%3A%20%22HL7%22%2C%20%22destinationFormat%22%3A%20%22HL7_V2_ORU%22%2C%20%22destinationType%22%3A%20%22example%22%2C%20%22destinationConnectionParams%22%3A%7B%20%22URI%22%3A%20%22example%3A%2F%2Fexample%3A15050%22%2C%20%22HOST%22%3A%20%22example%22%2C%20%22PORT%22%3A%20%22example%22%20%7D%20%7D";-H "Content-Type: multipart/form-data";-F "file=@/path/to/file/in/localsystem.HL7";
Это работает, но я хотел знать, как это сделать, используяInvokeHttp процессор.Любая помощь с благодарностью!Спасибо.