ユーザーが複数のファイルをバックエンド サーバーに送信できるサーブレット ベースのフォームを作成しようとしています。
フォームは、いくつかのファイル セレクターで構成されています。
フォームは 1 つのサーブレットから送信され、出力ストリームに text/html として出力されます。(ページの多くは、ユーザーがログインしているかどうかなどに依存しています。)
ブラウザでは、html は次のようになります。
<form action="https://localhost:8441/uploadtest" method="post" enctype="multipart/form-data" >
1 つ以上のファイルを選択して送信ボタンをクリックすると、リクエストは正しいリンクに転送されますが、request.getContentType() が null であるため、ファイル アップロード ハンドラはデータを処理できません。
組み込みの jetty 9 サーバーを使用して、サーブレットをホストしています。サーブレット API のバージョンは 3.0 です。ハンドラーは、コンテンツ タイプが null であることを示す例外をスローします。これは、デバッグ用に追加した print ステートメントの出力によっても確認されます。
数時間問題を検索して探していましたが、フォームが enctype を multipart/form-data として POST リクエストを送信したにもかかわらず、コンテンツ タイプが null に設定されている理由がわかりません。
ハンドラー コードは次のとおりです。
@Override
public void doHandle(String target, Request baseRequest, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String contentType = request.getContentType();
System.out.println(contentType);
if (contentType != null && contentType.startsWith("multipart/form-data")) {
baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG);
}
//processing here.