Multipart 解析器
來自 org.springframework.web.multipart
包的 MultipartResolver
是用於解析包含檔案上傳的 multipart 請求的策略。對於 Servlet multipart 請求解析,有一個基於容器的 StandardServletMultipartResolver
實現。請注意,基於 Apache Commons FileUpload 的過時 CommonsMultipartResolver
從 Spring Framework 6.0(其新的 Servlet 5.0+ 基線)開始已不再可用。
要啟用 multipart 處理,您需要在 DispatcherServlet
的 Spring 配置中宣告一個名為 multipartResolver
的 MultipartResolver
bean。DispatcherServlet
會檢測到它並將其應用於傳入請求。當接收到內容型別為 multipart/form-data
的 POST 請求時,解析器會解析內容並將當前的 HttpServletRequest
包裝為 MultipartHttpServletRequest
,以便除了將部分作為請求引數公開之外,還能訪問解析的檔案。
Servlet Multipart 解析
Servlet multipart 解析需要透過 Servlet 容器配置來啟用。為此,請執行以下操作:
-
在 Java 中,在 Servlet 註冊上設定
MultipartConfigElement
。 -
在
web.xml
中,向 servlet 宣告新增一個"<multipart-config>"
部分。
以下示例展示瞭如何在 Servlet 註冊上設定 MultipartConfigElement
-
Java
-
Kotlin
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// ...
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
// Optionally also set maxFileSize, maxRequestSize, fileSizeThreshold
registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
}
}
class AppInitializer : AbstractAnnotationConfigDispatcherServletInitializer() {
// ...
override fun customizeRegistration(registration: ServletRegistration.Dynamic) {
// Optionally also set maxFileSize, maxRequestSize, fileSizeThreshold
registration.setMultipartConfig(MultipartConfigElement("/tmp"))
}
}
一旦 Servlet multipart 配置到位,您可以新增一個型別為 StandardServletMultipartResolver
、名稱為 multipartResolver
的 bean。
此解析器變體原樣使用您的 Servlet 容器的 multipart 解析器,可能使應用程式暴露於容器實現差異。預設情況下,它會嘗試解析任何帶有任何 HTTP 方法的 |