I've been trying to find a solution to easily allow receiving attachments
in a multipart payload (such as "multipart/related") [1]. The FileUpload
library comes very close to allowing us to at least receive such parts.

However, with the current implementation (2.0.0-M2)
of FileItemInputIteratorImpl [3], any parts without a form field name
("name" value in the Content-Disposition header) or a file name ("filename"
value in the Content-Disposition header) are discarded. A related, but not
identical, work item is in the project jira, as FILEUPLOAD-281 [2], but
this is quite an old item (from 2017) and the proposed patch is likely no
longer suitable.

I have been looking at the code, and I'm wondering if there is an easy way
that at least partial support for these "unsupported" multipart payloads
could be added without much effort. At a fairly quick glance, it looks like
one could eliminate or bypass the `if (fileName == null)` check in
FileItemInputIteratorImpl::findNextItem [3], and it "would work" --
however, any code that relied on having a file name might fail -- but I
don't see anything in the library that would fail, it would be client code
most likely that would fail (a breaking change).

As such, a change like that would likely want to be controlled by some
"flag" or similar when constructing the "FileUpload" object (derived from
AbstractFileUpload [4]), or by adding a method to control that flag to
AbstractFileUpload [4].

I am happy to implement a solution / patch and post a PR / change, but
given that I am not intimately familiar with the project, the proposals /
suggestions above may not be in line with how the project wants to evolve,
etc. If adding such functionality (or similar) is not desirable, I will
likely resort to patching it in some way to at least bypass this
limitation, or trying to find another solution / library.

As such, feedback on this would be greatly appreciated before I invest
additional effort going in the "wrong direction".

Thanks for any feedback anyone can provide,

Robert


[1] Motivation for this comes from trying to support a "SOAP with
attachments" style interface (not popular, but unfortunately used by a
product we need to integrate with, and is unchangeable by us). The
related W3 document for this is "SOAP-attachments" (
https://www.w3.org/TR/SOAP-attachments), which uses the Content-ID part
header to identify parts instead of form fields or filenames.

[2] https://issues.apache.org/jira/browse/FILEUPLOAD-281

[3]
https://github.com/apache/commons-fileupload/blob/master/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/FileItemInputIteratorImpl.java#L127

[4]
https://github.com/apache/commons-fileupload/blob/master/commons-fileupload2-core/src/main/java/org/apache/commons/fileupload2/core/AbstractFileUpload.java

Reply via email to