Multipart 解析器

來自 org.springframework.web.multipart 套件的 MultipartResolver 是一種用於解析 Multipart 請求(包括檔案上傳)的策略。有一個基於容器的 StandardServletMultipartResolver 實作,用於 Servlet Multipart 請求解析。請注意,基於 Apache Commons FileUpload 的過時 CommonsMultipartResolver 已不再可用,自 Spring Framework 6.0 及其新的 Servlet 5.0+ 基準線起已移除。

若要啟用 Multipart 處理,您需要在 DispatcherServlet Spring 配置中宣告一個名為 multipartResolverMultipartResolver Bean。DispatcherServlet 會偵測到它並將其應用於傳入的請求。當收到內容類型為 multipart/form-data 的 POST 請求時,解析器會解析內容,並將目前的 HttpServletRequest 包裝為 MultipartHttpServletRequest,以便除了將部件公開為請求參數之外,還能存取已解析的檔案。

Servlet Multipart 解析

需要透過 Servlet 容器配置啟用 Servlet Multipart 解析。若要執行此操作

  • 在 Java 中,在 Servlet 註冊上設定 MultipartConfigElement

  • web.xml 中,將 "<multipart-config>" 區段新增至 Servlet 宣告。

以下範例示範如何在 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 方法的 multipart/ 內容類型,但並非所有 Servlet 容器都可能支援此類型。請參閱 StandardServletMultipartResolver Java 文件以取得詳細資訊和配置選項。