[ https://issues.apache.org/jira/browse/HTTPCLIENT-2360?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17922795#comment-17922795 ]
Arturo Bernal edited comment on HTTPCLIENT-2360 at 1/31/25 6:07 PM: -------------------------------------------------------------------- For what I understand, I would say something like this in FormBodyPartBuilder: {code:java} if (this.body.getFilename() != null) { String filename = this.body.getFilename(); if (canEncodeToISO_8859_1(filename)) { fieldParameters.add(new BasicNameValuePair(MimeConsts.FIELD_PARAM_FILENAME, filename)); } else { fieldParameters.add(new BasicNameValuePair(MimeConsts.FIELD_PARAM_FILENAME_START, encodeRFC5987(filename))); } }{code} where {code:java} private static String encodeRFC5987(String filename) { try { return UTF8 + "''" + PercentCodec.RFC5987.encode(filename); } catch (Exception e) { return filename; // Fallback: return the original filename if encoding fails } } private static boolean canEncodeToISO_8859_1(final String input) { return input.chars().allMatch(ch -> ch <= 255); }{code} was (Author: abernal): For what I understand, I would say something like this in FormBodyPartBuilder: ``` if (this.body.getFilename() != null) { String filename = this.body.getFilename(); if (canEncodeToISO_8859_1(filename)) { fieldParameters.add(new BasicNameValuePair(MimeConsts.FIELD_PARAM_FILENAME, filename)); } else { fieldParameters.add(new BasicNameValuePair(MimeConsts.FIELD_PARAM_FILENAME_START, encodeRFC5987(filename))); } }``` where private static String encodeRFC5987(String filename) { try { return UTF8 + "''" + PercentCodec.RFC5987.encode(filename); } catch (Exception e) { return filename; // Fallback: return the original filename if encoding fails } } private static boolean canEncodeToISO_8859_1(final String input) { return input.chars().allMatch(ch -> ch <= 255); } > rfc6266 support in MIME multipart > --------------------------------- > > Key: HTTPCLIENT-2360 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2360 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient (classic) > Affects Versions: 5.4.1 > Reporter: Hiran Chaudhuri > Priority: Minor > Labels: volunteers-wanted > Fix For: Stuck > > > The following code creates a bad HTTP request: > > {code:java} > File file = ... > FileBody fileBody = new FileBody(sourceFile); > MultipartEntityBuilder builder = MultipartEntityBuilder.create(); > builder.setMode(HttpMultipartMode.LEGACY); > builder.addPart("document", fileBody); > HttpEntity requestEntity = builder.build(); > URI endpoint = ... > HttpPost httpPost = new HttpPost(endpoint.toString()); > httpPost.setEntity(requestEntity); > httpClient.execute(httpPost, getHttpClientContext(), ...); {code} > The request contains the file and a {{Content-Disposition}} header. Inside > this header the filename is contained. So far so good. > > But as filesystems go international and support all kinds of characters, the > {{filename}} header needs to be encoded in ISO-8859-1 or rfc5987 applies. But > in reality HttpClient 5.4.1 uses UTF-8 encoding, which can break other > servers trying to parse the request. > I like to use this client a lot. Please enhance it to follow > https://www.rfc-editor.org/rfc/rfc6266#page-5 which allows to use UTF-8 > encoding in the {{filename*}} header. Or even better, HttpClient fills both > headers so the server can pick. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org