I want to make a Multipart request to my server from java using the apache CloseableHttpAsyncClient, this is what i currently have:
File file = new File("pathname");
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
multipartEntityBuilder.addBinaryBody("file", new FileInputStream(file), ContentType.DEFAULT_BINARY, "file");
multipartEntityBuilder.addTextBody("filename", "File one");
HttpEntity multipartEntity = multipartEntityBuilder.build();
BufferedHttpEntity buffEntity = new BufferedHttpEntity(multipartEntity);
But when uploading a large file it throws a java.lang.OutOfMemoryError and i see it occupy all my machine memory ( Process goes from 100Mb memory to 3000+Mb ).
I have also tried to replace
multipartEntityBuilder.addBinaryBody("file", new FileInputStream(file), ContentType.DEFAULT_BINARY, "file");
with
multipartEntityBuilder.addBinaryBody("file", file);
But this has limited content length and gives the error "Content length is too long".
So how do I upload a large file (50gb+) using apache CloseableHttpAsyncClient?
EDIT
As suggested, i removed the BufferedHttpEntity but now i get the error "Content Length unknown". If i add a header with content length it tells me that content length header is already present.
EDIT 2
If i change the line
multipartEntityBuilder.addBinaryBody("file", new FileInputStream(file), ContentType.DEFAULT_BINARY, "file");
to
multipartEntityBuilder.addPart("file", fileContentBody);
I get the error that Content length is too long
After some trial and error i ended up switching to the
CloseableHttpClientwithRequestBuilderandHttpUriRequestinstead ofHttpPostto execute the request in a blocking way on a thread.