前提・実現したいこと
spring-bootでwwebアプリを作成しています。
Content-Type: multipart/form-data Content-Encoding: gzip Transfer-Encoding: chunked
そして、パートの一部にバイナリが含まれる
といったリクエストを受け付けたいと思っています。
以下を探していますが、有用な手段が得られておりません...
実現したいことは理想順で以下になります。
1.リクエスト解凍できるライブラリを利用したい
2.コントローラー層でMultipartHttpServletRequstクラスgetParts()で取得したい
3.2.が無理ならば独自の手法で...
発生している問題・試したこと
1.に関しては見つけられず(圧縮レスポンスはあるのですが...リクエストの解凍はあるのでしょうか...)
2.3.に関しては、現状、簡単にはいかなそう...となっています。
ーーー
2.3.の調査内容①
ネットで検索してヒットする手法「Filter層でGZIPInputStreamにてgzip解凍するWrapperをかましたリクエスト情報を流す」にて動作確認したところ、getParts()メソッドではgzip解凍の細工をしたInputStreamを利用してくれない様子。
getParts()はWrapperをたどっていくが、最終的にはorg.apache.catalina.connector.Requestクラス.getParts()にたどり着くが、
その処理をたどっていくとgetInputStream()を実行している箇所があるが、上記の細工部分に到達しない。
(別途、独自でバッファ??)
ーーー
2.3.の調査内容②
デフォルトのStandardServletMultipartResolverを利用しているとgetParts()ぐらいしか簡単に取得できる方法が分からなかったので、
提供されているもう一つのクラスCommonservletMultipartResolverを使ってみると、
getParts()とは別ではあるが、gzip解凍データにて、パート情報を保持していた。
ただ、形式的には、Map<String, String[]>となっており、バイナリパートは正常に解釈できないのではないかと思われる。
ーーー
といった形で、1.2.3.どれも実現難しい、、、といった状況です。
(できるのか不明ですが、FW実装を見ながらコントローラー層で解凍するなど無理やり何とかするしかない..?という感じで詰まっております..)
上記について何卒よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
spring-boot 2.3.4.RELEASE
HTTP 1.1
あなたの回答
tips
プレビュー