Explorar o código

通过 PUT 请求传输 multipart/form-data 数据

reghao %!s(int64=3) %!d(string=hai) anos
pai
achega
157d8f9099

+ 33 - 0
src/main/java/cn/reghao/dfs/store/config/PostAndPutCommonsMultipartResolver.java

@@ -0,0 +1,33 @@
+package cn.reghao.dfs.store.config;
+
+import org.springframework.http.HttpMethod;
+import org.springframework.web.multipart.support.StandardServletMultipartResolver;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+/**
+ * @author reghao
+ * @date 2022-11-22 16:18:13
+ */
+public class PostAndPutCommonsMultipartResolver extends StandardServletMultipartResolver {
+    private static final String POST_METHOD = "POST";
+    private static final String PUT_METHOD = "PUT";
+
+    @Override
+    public boolean isMultipart(HttpServletRequest request) {
+
+        boolean isMultipartRequest = false;
+
+        if (request != null) {
+            HttpMethod httpMethod = HttpMethod.valueOf(request.getMethod());
+
+            if (Objects.equals(HttpMethod.POST,httpMethod) || Objects.equals(HttpMethod.PUT,httpMethod)) {
+                String contentType = request.getContentType();
+
+                isMultipartRequest = (contentType != null && contentType.toLowerCase().startsWith("multipart/"));
+            }
+        }
+        return isMultipartRequest;
+    }
+}

+ 18 - 6
src/main/java/cn/reghao/dfs/store/config/WebConfig.java

@@ -2,9 +2,12 @@ package cn.reghao.dfs.store.config;
 
 
 import cn.reghao.dfs.store.inerceptor.FileAccessInterceptor;
 import cn.reghao.dfs.store.inerceptor.FileAccessInterceptor;
 import cn.reghao.dfs.store.inerceptor.JwtTokenFilter;
 import cn.reghao.dfs.store.inerceptor.JwtTokenFilter;
+import org.springframework.boot.autoconfigure.web.servlet.MultipartProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.support.StandardServletMultipartResolver;
+import org.springframework.web.servlet.DispatcherServlet;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@@ -19,9 +22,11 @@ import javax.servlet.Filter;
 @Configuration
 @Configuration
 public class WebConfig extends WebMvcConfigurationSupport {
 public class WebConfig extends WebMvcConfigurationSupport {
     private final FileAccessInterceptor fileAccessInterceptor;
     private final FileAccessInterceptor fileAccessInterceptor;
+    private final MultipartProperties multipartProperties;
 
 
-    public WebConfig(FileAccessInterceptor fileAccessInterceptor) {
+    public WebConfig(FileAccessInterceptor fileAccessInterceptor, MultipartProperties multipartProperties) {
         this.fileAccessInterceptor = fileAccessInterceptor;
         this.fileAccessInterceptor = fileAccessInterceptor;
+        this.multipartProperties = multipartProperties;
     }
     }
 
 
     @Override
     @Override
@@ -32,13 +37,13 @@ public class WebConfig extends WebMvcConfigurationSupport {
                 .addResourceLocations("classpath:/META-INF/resources/webjars/");
                 .addResourceLocations("classpath:/META-INF/resources/webjars/");
     }
     }
 
 
-    @Override
+    /*@Override
     public void addInterceptors(InterceptorRegistry registry) {
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(fileAccessInterceptor);
         registry.addInterceptor(fileAccessInterceptor);
-    }
+    }*/
 
 
     // TODO 若 dfs-gw 中处理了跨域, 那么这里需要注释
     // TODO 若 dfs-gw 中处理了跨域, 那么这里需要注释
-    @Override
+    /*@Override
     public void addCorsMappings(CorsRegistry registry) {
     public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**")
         registry.addMapping("/**")
                 .allowedOrigins("*")
                 .allowedOrigins("*")
@@ -46,13 +51,20 @@ public class WebConfig extends WebMvcConfigurationSupport {
                 .allowCredentials(true)
                 .allowCredentials(true)
                 .maxAge(3600)
                 .maxAge(3600)
                 .allowedHeaders("*");
                 .allowedHeaders("*");
-    }
+    }*/
 
 
-    @Bean
+    /*@Bean
     public FilterRegistrationBean<Filter> jwtTokenFilter() {
     public FilterRegistrationBean<Filter> jwtTokenFilter() {
         FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
         FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
         registrationBean.setFilter(new JwtTokenFilter());
         registrationBean.setFilter(new JwtTokenFilter());
         registrationBean.addUrlPatterns("*");
         registrationBean.addUrlPatterns("*");
         return registrationBean;
         return registrationBean;
+    }*/
+
+    @Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
+    public StandardServletMultipartResolver multipartResolver() {
+        PostAndPutCommonsMultipartResolver multipartResolver = new PostAndPutCommonsMultipartResolver();
+        multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
+        return multipartResolver;
     }
     }
 }
 }