cancel
Showing results forย 
Search instead forย 
Did you mean:ย 

REST Post Multipart Form-Data + File Upload Issue

whaleyl
New Contributor III

Iโ€™m having trouble correctly formatting multipart form-data to be sent as the body of a REST Post request along with a single file upload.

Iโ€™ve managed to get the Post request to correctly send in Postman with the required key/value pairs and a test file:

Postman

However, when attempting to replicate this in SnapLogic I am unsuccessful.

Iโ€™ve managed to correctly map the key/value pairs in a mapper, and have created the following JSON in a JSON generator using my mapped values:

JSONGenerator

Iโ€™ve used my โ€œentityโ€ object as the HTTP entity in my Post request, and pointed to a local test file for upload in my REST Post snap:

PostSnap1
PostSnap2

Is my approach to compiling the form-data correct, or no?

10 REPLIES 10

dwhite
Employee
Employee

Looks like youโ€™re giving the entity JSON, a target server expecting form-data isnโ€™t going to know what to do with that. Try formatting your entity like

โ€˜key1=โ€™ + $yourData1 + โ€˜&key2=โ€™ + $yourdata2

Do it right in the entity setting of the snap.

Also, looks like your setting for Single File Upload: Multipart Content-Type is not set correctly. This field is for the MIME type of the file youโ€™re trying to post, so when it gets formatted by the snap into a multipart request, it knows how to describe the file. So using โ€œmultipart/form-dataโ€ like you have set in the screenshot is not going to work.

It looks like youโ€™re posting an xlsx file. So in your case you can either use the specific mime type for the file โ€œapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetโ€ or preferably the generic binary stream content type โ€œapplication/octet-streamโ€. By doing that you let the target server know what kind of file youโ€™re posting.

Try making those changes and see what your results are.

whaleyl
New Contributor III

Thank you very much for the help and feedback, Iโ€™ve updated my pipeline with your requested changes.

The new HTTP entity is formatted as follows within the Post snap:

image

Iโ€™ve also changed the content type for the upload file to be โ€œapplication/octet-streamโ€, and for the sake of testing am referencing the same file for upload in both Postman and SnapLogic. Iโ€™ve also set the file key to be the same as Iโ€™ve set it up in Postman:

image

Iโ€™m actually now getting a 200 back from the Post snap in SnapLogic, but the response back from my target endpoint is empty as compared to Postman.

Hereโ€™s the response back from SnapLogic:

image

And hereโ€™s the expected response as seen in Postman:

expectedresponse

Based on your recommendations and from what Iโ€™ve shared, is my Post snap now setup correctly? At this point I feel like Iโ€™m overlooking some small detail. Any extra help is appreciated.

In your response in SnapLogic, what http headers are you getting back?

Also, what http headers are you sending in postman request?

whaleyl
New Contributor III

Here are my headers Iโ€™m sending + getting back in Postman:

image

And here are my headers Iโ€™m sending + getting back in SnapLogic:

image

image