Hello,
I'm trying to upload a big file with multipart/form-data request.
AsyncHttpClient.BoundRequestBuilder request =
asyncHttpClient.preparePost("
http://postservice");
Part p1 = new FilePart(filename, new File(filename), type, "binary");
Part p2 = new StringPart("importantparam", "param");
request.addBodyPart(p1);
request.addBodyPart(p2);
try{
Future<Response> f = request.execute();
Response r = f.get();
}
and received Out of Memory exception.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at
org.jboss.netty.buffer.HeapChannelBuffer.<init>(HeapChannelBuffer.java:
47)
at
org.jboss.netty.buffer.BigEndianHeapChannelBuffer.<init>(BigEndianHeapChannelBuffer.java:
39)
at org.jboss.netty.buffer.ChannelBuffers.buffer(ChannelBuffers.java:
139)
at
org.jboss.netty.buffer.HeapChannelBufferFactory.getBuffer(HeapChannelBufferFactory.java:
73)
at
org.jboss.netty.buffer.DynamicChannelBuffer.ensureWritableBytes(DynamicChannelBuffer.java:
84)
at
org.jboss.netty.buffer.DynamicChannelBuffer.writeBytes(DynamicChannelBuffer.java:
233)
at
org.jboss.netty.buffer.ChannelBufferOutputStream.write(ChannelBufferOutputStream.java:
72)
at com.ning.http.multipart.FilePart.sendData(FilePart.java:186)
at com.ning.http.multipart.Part.send(Part.java:304)
at com.ning.http.multipart.Part.sendParts(Part.java:374)
at
com.ning.http.multipart.MultipartRequestEntity.writeRequest(MultipartRequestEntity.java:
116)
at
com.ning.http.client.providers.netty.NettyAsyncHttpProvider.construct(NettyAsyncHttpProvider.java:
647)
at
com.ning.http.client.providers.netty.NettyAsyncHttpProvider.buildRequest(NettyAsyncHttpProvider.java:
453)
at com.ning.http.client.providers.netty.NettyConnectListener
$Builder.build(NettyConnectListener.java:122)
at
com.ning.http.client.providers.netty.NettyAsyncHttpProvider.doConnect(NettyAsyncHttpProvider.java:
773)
at
com.ning.http.client.providers.netty.NettyAsyncHttpProvider.execute(NettyAsyncHttpProvider.java:
708)
at
com.ning.http.client.AsyncHttpClient.executeRequest(AsyncHttpClient.java:
476)
at com.ning.http.client.AsyncHttpClient
$BoundRequestBuilder.execute(AsyncHttpClient.java:231)
Is there another way I should make multipart request?
I found out that someone has been already reported about this issue
https://issues.sonatype.org/browse/AHC-78
and it's marked as fixed in 1.6.4, but it's still reproduced on fresh
async-client-1.6.4 version .
Is there any patch available?