-
Notifications
You must be signed in to change notification settings - Fork 973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enhance filename encoding in multipart/form-data (HTTPCLIENT-2360) #618
base: master
Are you sure you want to change the base?
Conversation
…r RFC 6266/5987 - Modified FormBodyPartBuilder to support HttpMultipartMode, adding filename* with UTF-8 encoding for non-ISO-8859-1 filenames in STRICT/EXTENDED modes, skipping it in LEGACY mode. - Updated HttpRFC7578Multipart to use mode for filename encoding: percent-encode in EXTENDED, ISO-8859-1 in STRICT/LEGACY, and always encode filename* per RFC 5987. - Adjusted MultipartEntityBuilder to propagate mode to FormBodyPartBuilder, ensuring consistent behavior across the pipeline. - Fixed tests to align with mode-specific expectations, maintaining LEGACY mode’s raw UTF-8 filename behavior.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@arturobernalg Looks good. Some minor suggestions.
* @return this builder instance for method chaining | ||
* @since 5.5 | ||
*/ | ||
public FormBodyPartBuilder setMode(final HttpMultipartMode mode) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@arturobernalg Would not it be better to pass this parameter at the construction time to #create
method?
* @since 5.5 | ||
*/ | ||
private static boolean canEncodeToISO8859_1(final String input) { | ||
return StandardCharsets.ISO_8859_1.newEncoder().canEncode(input); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@arturobernalg Let's make the method non-static re-use the encoder rather than creating a new instance with every invocation
@@ -295,11 +295,11 @@ void testMultipartFormBrowserCompatibleNonASCIIHeaders() throws Exception { | |||
@SuppressWarnings("resource") | |||
final FormBodyPart p1 = FormBodyPartBuilder.create( | |||
"field1", | |||
new InputStreamBody(new FileInputStream(tmpfile), s1 + ".tmp")).build(); | |||
new InputStreamBody(new FileInputStream(tmpfile), s1 + ".tmp")).setMode(HttpMultipartMode.LEGACY).build(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@arturobernalg Would not it look better as a #create
parameter?
Implements RFC 6266/5987 filename encoding in multipart/form-data. Adds mode-aware support in FormBodyPartBuilder and HttpRFC7578Multipart, propagates mode via MultipartEntityBuilder, and updates tests. Resolves https://issues.apache.org/jira/browse/HTTPCLIENT-2360.