Skip to content

Commit 486b241

Browse files
author
Stephane Landelle
committed
Allow Multipart with unknown content length, close AsyncHttpClient#427
1 parent 54b01ca commit 486b241

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

src/main/java/com/ning/http/client/providers/netty/NettyAsyncHttpProvider.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -475,10 +475,18 @@ protected final <T> void writeRequest(final Channel channel, final AsyncHttpClie
475475
} else {
476476
nettyRequest.setHeader(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);
477477
}
478-
478+
479479
} else if (future.getRequest().getParts() != null) {
480480
String contentType = nettyRequest.getHeader(HttpHeaders.Names.CONTENT_TYPE);
481-
String length = nettyRequest.getHeader(HttpHeaders.Names.CONTENT_LENGTH);
481+
String contentLength = nettyRequest.getHeader(HttpHeaders.Names.CONTENT_LENGTH);
482+
483+
long length = -1;
484+
if (contentLength != null) {
485+
length = Long.parseLong(contentLength);
486+
} else {
487+
nettyRequest.addHeader(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);
488+
}
489+
482490
body = new MultipartBody(future.getRequest().getParts(), contentType, length);
483491
}
484492
}
@@ -822,7 +830,9 @@ else if (uri.getRawQuery() != null)
822830
MultipartRequestEntity mre = AsyncHttpProviderUtils.createMultipartRequestEntity(request.getParts(), request.getHeaders());
823831

824832
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_TYPE, mre.getContentType());
825-
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(mre.getContentLength()));
833+
if (mre.getContentLength() >= 0) {
834+
nettyRequest.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(mre.getContentLength()));
835+
}
826836

827837
} else if (request.getEntityWriter() != null) {
828838
int length = (int) request.getContentLength();

src/main/java/com/ning/http/multipart/MultipartBody.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,9 @@ public class MultipartBody implements RandomAccessBody {
4848

4949
enum FileLocation {NONE, START, MIDDLE, END}
5050

51-
public MultipartBody(List<com.ning.http.client.Part> parts, String contentType, String contentLength) {
51+
public MultipartBody(List<com.ning.http.client.Part> parts, String contentType, Long contentLength) {
5252
this.boundary = MultipartEncodingUtil.getAsciiBytes(contentType.substring(contentType.indexOf("boundary=") + "boundary=".length()));
5353

54-
this.contentLength = Long.parseLong(contentLength);
5554
this.parts = parts;
5655

5756
files = new ArrayList<RandomAccessFile>();

0 commit comments

Comments
 (0)