Writing Wrapper for FileUpload in Spring boot : File not Present

Viewed 45

Use Case

I need to write a wrapper for a FileUpload API, which takes Files from UI, and upload those to remote API. What I have chalked out so far:

Made a Controller which takes File and Content body as Request part, then I try to upload them to remote API, code snippets follow:

Controller Endpoint

ResponseEntity uploadFiles(@RequestPart("files") MultipartFile[] files, @RequestPart("someData") Metadata fileMetadata)

File Upload Code

       byte[][] fileArray = Arrays.stream(files).map(multipartFile -> {
            try {
                return multipartFile.getBytes();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }).toArray(byte[][]::new);
        //add file
        LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
        configuration.getDocumentCategory());
        params.add(DocStorageConstants.FILE, fileArray);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
        ResponseEntity<FileUploadResponse> responseEntity = restTemplate.postForEntity(configuration.getUploadEndpoint(), requestEntity, FileUploadResponse.class);

The remote API returns response as if Files never reached this API, what I need to do to avoid this? I might try writing file to a temporary file and then upload that file to remote endpoint, not sure if that is a clean approach. Thanks in advance for any suggestions!

[Update]: The cURL that I am trying to form is below:

curl --location --request POST 'http://<host>:<port>/file-endpoint' \
--header 'X-Api-Client:<api-key>' \
--header 'x-service-id: <service-id>' \
--form 'file=@"/aggregate.csv"' \
--form 'uploadRequest="{\"bn\":\"NFA\",\"dc\":\"generalDocs\",
\"tags\":[\"test\", \"test2\"]
}"'
1 Answers

Following snippet worked

Arrays.stream(files).forEach(multipartFile -> params.add(DocStorageConstants.FILE, multipartFile.getResource()));
Related