|
15 | 15 | */ |
16 | 16 | package io.vertx.ext.web.client.impl; |
17 | 17 |
|
18 | | -import io.netty.handler.codec.http.multipart.HttpPostRequestEncoder; |
19 | 18 | import io.vertx.core.*; |
20 | 19 | import io.vertx.core.buffer.Buffer; |
21 | | -import io.vertx.core.http.HttpClientRequest; |
22 | | -import io.vertx.core.http.HttpClientResponse; |
23 | | -import io.vertx.core.http.HttpHeaders; |
24 | | -import io.vertx.core.http.RequestOptions; |
| 20 | +import io.vertx.core.http.*; |
25 | 21 | import io.vertx.core.internal.http.HttpClientInternal; |
26 | 22 | import io.vertx.core.internal.ContextInternal; |
27 | 23 | import io.vertx.core.internal.PromiseInternal; |
@@ -433,19 +429,42 @@ private void handlePrepareRequest() { |
433 | 429 | if (body instanceof Pipe) { |
434 | 430 | // |
435 | 431 | } else if (body instanceof MultipartForm) { |
436 | | - MultipartFormUpload multipartForm; |
| 432 | + ClientForm form; |
437 | 433 | try { |
438 | 434 | boolean multipart = "multipart/form-data".equals(contentType); |
439 | | - HttpPostRequestEncoder.EncoderMode encoderMode = this.request.multipartMixed() ? HttpPostRequestEncoder.EncoderMode.RFC1738 : HttpPostRequestEncoder.EncoderMode.HTML5; |
440 | | - multipartForm = new MultipartFormUpload(context, (MultipartForm) this.body, multipart, encoderMode); |
441 | | - this.body = multipartForm.pipe(); |
| 435 | + if (multipart) { |
| 436 | + ClientMultipartForm multipartForm = ClientMultipartForm.multipartForm(); |
| 437 | + multipartForm.mixed(request.multipartMixed()); |
| 438 | + form = multipartForm; |
| 439 | + } else { |
| 440 | + form = ClientForm.form(); |
| 441 | + } |
| 442 | + form.charset(((MultipartForm)body).getCharset()); |
| 443 | + ((MultipartForm)body).forEach(part -> { |
| 444 | + if (part.isAttribute()) { |
| 445 | + form.attribute(part.name(), part.value()); |
| 446 | + } else { |
| 447 | + ClientMultipartForm multipartForm = (ClientMultipartForm) form; |
| 448 | + if (part.isText()) { |
| 449 | + if (part.pathname() != null) { |
| 450 | + multipartForm.textFileUpload(part.name(), part.filename(), part.mediaType(), part.pathname()); |
| 451 | + } else { |
| 452 | + multipartForm.textFileUpload(part.name(), part.filename(), part.mediaType(), part.content()); |
| 453 | + } |
| 454 | + } else { |
| 455 | + if (part.pathname() != null) { |
| 456 | + multipartForm.binaryFileUpload(part.name(), part.filename(), part.mediaType(), part.pathname()); |
| 457 | + } else { |
| 458 | + multipartForm.binaryFileUpload(part.name(), part.filename(), part.mediaType(), part.content()); |
| 459 | + } |
| 460 | + } |
| 461 | + } |
| 462 | + }); |
| 463 | + this.body = form; |
442 | 464 | } catch (Exception e) { |
443 | 465 | fail(e); |
444 | 466 | return; |
445 | 467 | } |
446 | | - for (Map.Entry<String, String> header : multipartForm.headers()) { |
447 | | - requestOptions.putHeader(header.getKey(), header.getValue()); |
448 | | - } |
449 | 468 | } else if (body == null && "application/json".equals(contentType)) { |
450 | 469 | body = Buffer.buffer("null"); |
451 | 470 | } else if (body instanceof JsonObject) { |
@@ -530,6 +549,8 @@ private void doSendRequest(HttpClientRequest request) { |
530 | 549 | request.reset(0L, ar2.cause()); |
531 | 550 | } |
532 | 551 | }); |
| 552 | + } else if (bodyToSend instanceof ClientForm) { |
| 553 | + request.send((ClientForm) bodyToSend); |
533 | 554 | } else { |
534 | 555 | Buffer buffer = (Buffer) bodyToSend; |
535 | 556 | request.send(buffer); |
|
0 commit comments