Skip to main content

Hello together,

I'm having problems with uploading files to a RESTful Web-Service using UHTTP→SEND. The given api-function has to be called like this little php-Code snippet:

$request = new HttpRequest();
$request->setUrl('https://arap043v0l0t00.intern.arz-emmendingen.de:8443/server/le/document/upload');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Postman-Token' => 'de0d98e4-78ac-4049-9bfe-09262362554e',
  'cache-control' => 'no-cache',
  'Authorization' => 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJMbDE0M25KSmdIZGdUUHBhTmk0eFFZMVRUcWd6Y2xmT19lSnVCX2gzY19vIn0.eyJqdGkiOiI0Zjg1OGY2Zi0wMDIzLTQzNTQtOTI2Yi1jMTBiMTBiNjJkMzUiLCJleHAiOjE1NDQ1MjI1NzIsIm5iZiI6MCwiaWF0IjoxNTQ0NTIyMjcyLCJpc3MiOiJodHRwczovL2FyYXAwNDN2MGwwdDAwLmludGVybi5hcnotZW1tZW5kaW5nZW4uZGU6OTQ0My9hdXRoL3JlYWxtcy9oZWxpY2F0d2ViLWV4dGVybmFsIiwiYXVkIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwic3ViIjoiOTRiNzZlOWMtYzgyYS00MjZhLWJkNTQtM2NiYjJjYTE3ODgwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiMjY3MmZkZjUtZTEzOS00MTMzLWFlNTEtM2Q2NTExODEzOTI2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJST0xFX1VTRVIiXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJjbGllbnRIb3N0IjoiMTAuMzEuMTE4LjExNCIsImNsaWVudElkIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwicHJpbmNpcGFsaWQiOiJyb1c2RnVBRlRoQ1dRb1V5TklGTWRLIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWxlLXN5c3RlbS1jbGllbnQtYXJ6ZS1hZG1pbiIsImNsaWVudEFkZHJlc3MiOiIxMC4zMS4xMTguMTE0IiwiZW1haWwiOiJzZXJ2aWNlLWFjY291bnQtbGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluQHBsYWNlaG9sZGVyLm9yZyJ9.Z2qCao-lCe8jonVcNMe7YGid1XEgqkCPS_prwn8VVM5kxDKH37DZe7ugcaxfKV57wmkpS4LaJKhjzYzivIx1cF1zpq0wiIxCIu3yu8pXm55n5XrskbQAOLIQQXjQo7eftf_OsV4_OUxHDJF-2Y3v1CGqZaPRHXN4rmkdzlEXLzs1OAt9UtZJIVSzosyArblHhtDT-QCBHb_kezCWoJqql3xELHXDHR4eoEcdENSxeEFW5BG8lAE_lRW25X6d9CUVr1NU3kYP26kg-Mutw4cqPHqaA23aLESeBqQE7Llb1EuT1Q68qxyztSYRxrZEBLR0Oj4YGwLKDdhEBiGvI2Uf3A',
  'content-type' => 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
));

$request->setBody('------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="documentType"

Rechnung
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="description"

Dokument
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="uploadFile"; filename="U:\\\\le-portal\\\\20091020_Fit_und_entspannt.pdf"
Content-Type: application/pdf


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="externeVorgangsnummer"

df47f60f-b341-4f67-9dc9-71dee8896751
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="referenceIds"


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="vorgangsId"

1b424662-3d6e-4571-b8b2-dd269f64a019
------WebKitFormBoundary7MA4YWxkTrZu0gW--');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}

My Uniface-Code:

sRESTService = "/server/le/document/upload"
sUrl = $concat($S_LEP_FRONTEND_HOST$, sRESTService)
sMethode = "POST" 
sUser = ""
sPasswort = ""
putitem/id sHeaders, "Authorization", $concat("Bearer", " ", sAccessToken)
putitem/id sHeaders, "cache-control", "no-cache, no-store, max-age=0, must-revalidate"
putitem/id sHeaders, "connection", "close"
putitem/id sHeaders, "transfer-encoding", "chunked"
putitem/id sHeaders, "Content-Type", "multipart/form-data; boundary=----%%sUUID%%%"
sContent = ""
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"documentType%%" ", "%%^%%^", ps_DocumentType, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"description%%" ", "%%^%%^", ps_Description, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"uploadFile%%"; filename=%%"", ps_UploadFile, "%%"", "%%^")
sContent = $concat(sContent, "Content-Type: application/pdf", "%%^%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"externeVorgangsnummer%%"", "%%^%%^", ps_ExterneVorgangsnummer, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"vorgangsId%%"", "%%^%%^", ps_VorgangsId, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"referenceIds%%"", "%%^%%^", ps_ReferenceIds, "%%^")
sContent = $concat(sContent, "------", sUUID, "--", "%%^")

nRetCode = hUhttp->SEND(sUrl, sMethode, sUser, sPasswort, sHeaders, sContent, sReturn)


It produces the following content to be sent to the Web-Service.

"------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="documentType" 

Rechnung
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="description" 

Dokument
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="uploadFile"; filename="U:\\\\le-portal\\\\20091020_Fit_und_entspannt.pdf"
Content-Type: application/pdf

------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="externeVorgangsnummer"

df47f60f-b341-4f67-9dc9-71dee8896751
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="vorgangsId"

1b424662-3d6e-4571-b8b2-dd269f64a019
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="referenceIds"


------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7--
"

I've tested this Web-Service with tools like postman, and it works. Calling this Web-Service with Uniface results in "HTTP/1.1 200" (nice), but only some bytes of my message arrive. In my particular case the PDF to be uploaded has a length of 382478 Bytes, but the Web-Service receives only 158 bytes of my content.

Does anyone has an idea to solve my problem?

Thanks in advance,

Michael.


Hello together,

I'm having problems with uploading files to a RESTful Web-Service using UHTTP→SEND. The given api-function has to be called like this little php-Code snippet:

$request = new HttpRequest();
$request->setUrl('https://arap043v0l0t00.intern.arz-emmendingen.de:8443/server/le/document/upload');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Postman-Token' => 'de0d98e4-78ac-4049-9bfe-09262362554e',
  'cache-control' => 'no-cache',
  'Authorization' => 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJMbDE0M25KSmdIZGdUUHBhTmk0eFFZMVRUcWd6Y2xmT19lSnVCX2gzY19vIn0.eyJqdGkiOiI0Zjg1OGY2Zi0wMDIzLTQzNTQtOTI2Yi1jMTBiMTBiNjJkMzUiLCJleHAiOjE1NDQ1MjI1NzIsIm5iZiI6MCwiaWF0IjoxNTQ0NTIyMjcyLCJpc3MiOiJodHRwczovL2FyYXAwNDN2MGwwdDAwLmludGVybi5hcnotZW1tZW5kaW5nZW4uZGU6OTQ0My9hdXRoL3JlYWxtcy9oZWxpY2F0d2ViLWV4dGVybmFsIiwiYXVkIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwic3ViIjoiOTRiNzZlOWMtYzgyYS00MjZhLWJkNTQtM2NiYjJjYTE3ODgwIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiMjY3MmZkZjUtZTEzOS00MTMzLWFlNTEtM2Q2NTExODEzOTI2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJST0xFX1VTRVIiXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJjbGllbnRIb3N0IjoiMTAuMzEuMTE4LjExNCIsImNsaWVudElkIjoibGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluIiwicHJpbmNpcGFsaWQiOiJyb1c2RnVBRlRoQ1dRb1V5TklGTWRLIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LWxlLXN5c3RlbS1jbGllbnQtYXJ6ZS1hZG1pbiIsImNsaWVudEFkZHJlc3MiOiIxMC4zMS4xMTguMTE0IiwiZW1haWwiOiJzZXJ2aWNlLWFjY291bnQtbGUtc3lzdGVtLWNsaWVudC1hcnplLWFkbWluQHBsYWNlaG9sZGVyLm9yZyJ9.Z2qCao-lCe8jonVcNMe7YGid1XEgqkCPS_prwn8VVM5kxDKH37DZe7ugcaxfKV57wmkpS4LaJKhjzYzivIx1cF1zpq0wiIxCIu3yu8pXm55n5XrskbQAOLIQQXjQo7eftf_OsV4_OUxHDJF-2Y3v1CGqZaPRHXN4rmkdzlEXLzs1OAt9UtZJIVSzosyArblHhtDT-QCBHb_kezCWoJqql3xELHXDHR4eoEcdENSxeEFW5BG8lAE_lRW25X6d9CUVr1NU3kYP26kg-Mutw4cqPHqaA23aLESeBqQE7Llb1EuT1Q68qxyztSYRxrZEBLR0Oj4YGwLKDdhEBiGvI2Uf3A',
  'content-type' => 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
));

$request->setBody('------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="documentType"

Rechnung
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="description"

Dokument
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="uploadFile"; filename="U:\\\\le-portal\\\\20091020_Fit_und_entspannt.pdf"
Content-Type: application/pdf


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="externeVorgangsnummer"

df47f60f-b341-4f67-9dc9-71dee8896751
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="referenceIds"


------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="vorgangsId"

1b424662-3d6e-4571-b8b2-dd269f64a019
------WebKitFormBoundary7MA4YWxkTrZu0gW--');

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}

My Uniface-Code:

sRESTService = "/server/le/document/upload"
sUrl = $concat($S_LEP_FRONTEND_HOST$, sRESTService)
sMethode = "POST" 
sUser = ""
sPasswort = ""
putitem/id sHeaders, "Authorization", $concat("Bearer", " ", sAccessToken)
putitem/id sHeaders, "cache-control", "no-cache, no-store, max-age=0, must-revalidate"
putitem/id sHeaders, "connection", "close"
putitem/id sHeaders, "transfer-encoding", "chunked"
putitem/id sHeaders, "Content-Type", "multipart/form-data; boundary=----%%sUUID%%%"
sContent = ""
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"documentType%%" ", "%%^%%^", ps_DocumentType, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"description%%" ", "%%^%%^", ps_Description, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"uploadFile%%"; filename=%%"", ps_UploadFile, "%%"", "%%^")
sContent = $concat(sContent, "Content-Type: application/pdf", "%%^%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"externeVorgangsnummer%%"", "%%^%%^", ps_ExterneVorgangsnummer, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"vorgangsId%%"", "%%^%%^", ps_VorgangsId, "%%^")
sContent = $concat(sContent, "------", sUUID, "%%^")
sContent = $concat(sContent, "Content-Disposition: form-data; name=%%"referenceIds%%"", "%%^%%^", ps_ReferenceIds, "%%^")
sContent = $concat(sContent, "------", sUUID, "--", "%%^")

nRetCode = hUhttp->SEND(sUrl, sMethode, sUser, sPasswort, sHeaders, sContent, sReturn)


It produces the following content to be sent to the Web-Service.

"------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="documentType" 

Rechnung
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="description" 

Dokument
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="uploadFile"; filename="U:\\\\le-portal\\\\20091020_Fit_und_entspannt.pdf"
Content-Type: application/pdf

------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="externeVorgangsnummer"

df47f60f-b341-4f67-9dc9-71dee8896751
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="vorgangsId"

1b424662-3d6e-4571-b8b2-dd269f64a019
------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7
Content-Disposition: form-data; name="referenceIds"


------WebKitFormBoundaryA49805F10B0E4A3CB3F15B9AFD5947D7--
"

I've tested this Web-Service with tools like postman, and it works. Calling this Web-Service with Uniface results in "HTTP/1.1 200" (nice), but only some bytes of my message arrive. In my particular case the PDF to be uploaded has a length of 382478 Bytes, but the Web-Service receives only 158 bytes of my content.

Does anyone has an idea to solve my problem?

Thanks in advance,

Michael.


Hello Michael,

In case you want to download a binary file using the UHTTP component then this will only work with the DUMP_FILE_CONTENTS operation. I, however, have to add here that multi-part HTTP requests are (currently) not supported by the UHTTP file operations. Sorry.

It is, on the other hand, possible to process a multipart/form-data message if it only contains text data (e.g. when the embedded PDF-file is encoded with base64 or hex encoding.

For your use case you could call the RESTful Web-Service using an external command line tool (like e.g. cUrl) and spawn that from your Uniface application.

And if you are interested, on YouTube you can find two videos about how to upload/download files from Microsoft OneDrive using the UHTTP file operations.

Hope this helps.

Kind regards,
Daniel