Как отправить запрос http POST multipart / form-data с вложенным файлом, используя процессор Apache-nifi InvokeHttp? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь отправить запрос 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 процессор.Любая помощь с благодарностью!Спасибо.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете сделать это, используя GenerateFlowFile -> InvokeHTTP .

GenerateFlowFile создаст полезную нагрузку (в вашем случае содержимое localsystem.HL7) вашего сообщения в поле Custom Text.

InvokeHTTP должен иметь Content-Type как $ {mime.type} - значение по умолчанию и

Тогда посмотри, что выводится после твоего POST enter image description here

...