public interface MultipartResolverSpring 3.1 の時点で、Spring には 2 つの具体的な実装が含まれています。
CommonsMultipartResolver は Apache Commons FileUpload 用 StandardServletMultipartResolver アプリケーションがマルチパートリクエストを独自に解析することを選択する可能性があるため、Spring DispatcherServlets に使用されるデフォルトのリゾルバー実装はありません。実装を定義するには、DispatcherServlet's アプリケーションコンテキストで ID "multipartResolver" を持つ Bean を作成します。このようなリゾルバーは、その DispatcherServlet によって処理されるすべてのリクエストに適用されます。
DispatcherServlet がマルチパートリクエストを検出すると、構成された MultipartResolver を介してそれを解決し、ラップされた HttpServletRequestEE を渡します。コントローラーは、指定されたリクエストを MultipartHttpServletRequest インターフェースにキャストできます。これにより、任意の MultipartFiles へのアクセスが可能になります。このキャストは、実際のマルチパートリクエストの場合にのみサポートされることに注意してください。
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartRequest.getFile("image");
...
} 直接アクセスの代わりに、コマンドまたはフォームコントローラーは、ByteArrayMultipartFileEditor または StringMultipartFileEditor をデータバインダーに登録して、マルチパートコンテンツを自動的に適用して Bean プロパティを形成できます。DispatcherServlet で MultipartResolver を使用する代わりに、MultipartFilter を web.xml に登録できます。ルートアプリケーションコンテキストの対応する MultipartResolver Bean に委譲します。これは主に、Spring 独自の Web MVC フレームワークを使用しないアプリケーションを対象としています。
メモ: アプリケーションコードから MultipartResolver 自体にアクセスする必要はほとんどありません。MultipartHttpServletRequests をコントローラーで使用できるようにするだけで、バックグラウンドで機能します。
MultipartHttpServletRequest, MultipartFile, CommonsMultipartResolver, ByteArrayMultipartFileEditor, StringMultipartFileEditor, DispatcherServlet| 修飾子と型 | メソッドと説明 |
|---|---|
void | cleanupMultipart(MultipartHttpServletRequest request) アップロードされたファイルのストレージなど、マルチパート処理に使用されるリソースをすべてクリーンアップします。 |
boolean | isMultipart(HttpServletRequestEE request) 指定されたリクエストにマルチパートコンテンツが含まれているかどうかを判断します。 |
MultipartHttpServletRequest | resolveMultipart(HttpServletRequestEE request) 指定された HTTP リクエストをマルチパートファイルとパラメーターに解析し、リクエストをファイル記述子へのアクセスを提供する MultipartHttpServletRequest オブジェクト内にラップし、標準の ServletRequest メソッドを介して含まれるパラメーターにアクセスできるようにします。 |
boolean isMultipart(HttpServletRequestEE request)
通常、コンテンツ型 "multipart/form-data" をチェックしますが、実際に受け入れられるリクエストは、リゾルバー実装の機能によって異なる場合があります。
request - 評価されるサーブレットリクエスト MultipartHttpServletRequest resolveMultipart(HttpServletRequestEE request) throws MultipartException
MultipartHttpServletRequest オブジェクト内にラップし、標準の ServletRequest メソッドを介して含まれるパラメーターにアクセスできるようにします。request - ラップするサーブレットリクエスト (マルチパートコンテンツ型である必要があります)MultipartException - サーブレットリクエストがマルチパートでない場合、または実装固有の問題が発生した場合 (ファイルサイズの制限を超えるなど)MultipartRequest.getFile(java.lang.String), MultipartRequest.getFileNames(), MultipartRequest.getFileMap(), ServletRequest.getParameter(java.lang.String)EE, ServletRequest.getParameterNames()EE, ServletRequest.getParameterMap()EEvoid cleanupMultipart(MultipartHttpServletRequest request)
request - リソースをクリーンアップするリクエスト