in httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java [203:264]
MultipartFormEntity buildEntity() {
String boundaryCopy = boundary;
if (boundaryCopy == null && contentType != null) {
boundaryCopy = contentType.getParameter("boundary");
}
if (boundaryCopy == null) {
boundaryCopy = generateBoundary();
}
Charset charsetCopy = charset;
if (charsetCopy == null && contentType != null) {
charsetCopy = contentType.getCharset();
}
final List<NameValuePair> paramsList = new ArrayList<>(2);
paramsList.add(new BasicNameValuePair("boundary", boundaryCopy));
if (charsetCopy != null) {
paramsList.add(new BasicNameValuePair("charset", charsetCopy.name()));
}
final NameValuePair[] params = paramsList.toArray(EMPTY_NAME_VALUE_ARRAY);
final ContentType contentTypeCopy;
if (contentType != null) {
contentTypeCopy = contentType.withParameters(params);
} else {
boolean formData = false;
if (multipartParts != null) {
for (final MultipartPart multipartPart : multipartParts) {
if (multipartPart instanceof FormBodyPart) {
formData = true;
break;
}
}
}
if (formData) {
contentTypeCopy = ContentType.MULTIPART_FORM_DATA.withParameters(params);
} else {
contentTypeCopy = ContentType.create("multipart/mixed", params);
}
}
final List<MultipartPart> multipartPartsCopy = multipartParts != null ? new ArrayList<>(multipartParts) :
Collections.emptyList();
final HttpMultipartMode modeCopy = mode != null ? mode : HttpMultipartMode.STRICT;
final AbstractMultipartFormat form;
switch (modeCopy) {
case LEGACY:
form = new LegacyMultipart(charsetCopy, boundaryCopy, multipartPartsCopy);
break;
case EXTENDED:
if (contentTypeCopy.isSameMimeType(ContentType.MULTIPART_FORM_DATA)) {
if (charsetCopy == null) {
charsetCopy = StandardCharsets.UTF_8;
}
form = new HttpRFC7578Multipart(charsetCopy, boundaryCopy, multipartPartsCopy);
} else {
form = new HttpRFC6532Multipart(charsetCopy, boundaryCopy, multipartPartsCopy);
}
break;
default:
form = new HttpStrictMultipart(StandardCharsets.US_ASCII, boundaryCopy, multipartPartsCopy);
}
return new MultipartFormEntity(form, contentTypeCopy, form.getTotalLength());
}