spring-projects / spring-projects/spring-framework
Support "multipart/mixed" and "multipart/related"
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 60.2k
- Forks
- 38.8k
- Avg merge
- 5d 2h
- Merged PRs (30d)
- 27
Description
Besides multipart/form-data, there are two other multipart media types in use:
multipart/mixed, as defined in RFC 1341, and used in OData Batch Processingmultipart/related, as defined in RFC 2387, and used in Google Cloud Multipart Upload.
These have different properties than multipart/form-data, for instance in that they do not require a Content-Dispostion header for each part.
Furthermore, it seems that OData relies on nested multipart/mixed structures, where the outer batch part can contain a changeset that is in itself a multipart consisting of changes.
Not having done a full investigation, it appears that there are a number of issues with our current WebFlux multipart support that prevents us from fully supporting multipart/mixed and multipart/related:
- The
DefaultPartHttpMessageReaderis not capable of reading nested multipart messages. - The
MultipartHttpMessageWriterandPartEventHttpMessageWriterare not capable of writing nested multipart messages, except in a raw form. - The
PartandPartEventinterfaces expose anameproperty that reflects theContent-Dispositionname, but which only makes sense inmultipart/form-data. - The
MultipartHttpMessageWriterandPartEventHttpMessageWriterwrite aContent-Dispositionheader, which it only needed inmultipart/form-data.
This issue was created to gather all research done on multipart/mixed and multipart/related done so far, and to see how much interest there is in the community for Spring Framework to fully support these multipart types.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing DefaultPartHttpMessageReader, MultipartHttpMessageWriter, PartEventHttpMessageWriter, Part, and PartEvent, then compare their current behavior with RFC 1341, RFC 2387, and the linked OData and Google Cloud multipart examples. Document the required reader and writer changes for nested multipart/mixed and multipart/related support and define acceptance criteria before implementation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100