This is an automated email from the ASF dual-hosted git repository.

benjobs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 18b5cd890 [Fix] Interceptors add /resource/upload (#3154)
18b5cd890 is described below

commit 18b5cd8903eba994439f4d3d3fc34a8ca4abd003
Author: ChengJie1053 <[email protected]>
AuthorDate: Sat Sep 23 15:17:22 2023 +0800

    [Fix] Interceptors add /resource/upload (#3154)
    
    * [Fix] Interceptors add /resource/upload
    
    * Modify message
    
    * Modify FileUtils
    
    * Modify FileUtils and UploadFileTypeInterceptor
    
    * add tika
    
    * Update FileUtils.scala
---
 streampark-common/pom.xml                            |  7 +++++++
 .../apache/streampark/common/util/FileUtils.scala    | 20 ++++++++++++++++++++
 .../streampark/console/base/config/WebMvcConfig.java |  4 +++-
 .../base/interceptor/UploadFileTypeInterceptor.java  |  8 ++++++--
 4 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/streampark-common/pom.xml b/streampark-common/pom.xml
index 32babf65c..3214107ee 100644
--- a/streampark-common/pom.xml
+++ b/streampark-common/pom.xml
@@ -156,6 +156,13 @@
             <optional>true</optional>
         </dependency>
 
+        <!--tika -->
+        <dependency>
+            <groupId>org.apache.tika</groupId>
+            <artifactId>tika-core</artifactId>
+            <version>1.20</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git 
a/streampark-common/src/main/scala/org/apache/streampark/common/util/FileUtils.scala
 
b/streampark-common/src/main/scala/org/apache/streampark/common/util/FileUtils.scala
index 6b95884bc..6ebad0699 100644
--- 
a/streampark-common/src/main/scala/org/apache/streampark/common/util/FileUtils.scala
+++ 
b/streampark-common/src/main/scala/org/apache/streampark/common/util/FileUtils.scala
@@ -18,6 +18,12 @@ package org.apache.streampark.common.util
 
 import org.apache.streampark.common.util.ImplicitsUtils._
 
+import org.apache.commons.lang3.StringUtils
+import org.apache.tika.metadata.{HttpHeaders, Metadata}
+import org.apache.tika.mime.MediaType
+import org.apache.tika.parser.{AutoDetectParser, ParseContext}
+import org.xml.sax.helpers.DefaultHandler
+
 import java.io._
 import java.net.URL
 import java.nio.ByteBuffer
@@ -58,6 +64,20 @@ object FileUtils {
       }) == "504B0304"
   }
 
+  def isPythonFileType(contentType: String, input: InputStream): Boolean = {
+    if (StringUtils.isBlank(contentType) || input == null) {
+      throw new RuntimeException("The contentType or inputStream can not be 
null")
+    }
+    getMimeType(input) == MediaType.TEXT_PLAIN.toString && 
contentType.contains("text/x-python")
+  }
+
+  def getMimeType(stream: InputStream): String = {
+    val metadata: Metadata = new Metadata
+    val parser: AutoDetectParser = new AutoDetectParser
+    parser.parse(stream, new DefaultHandler, metadata, new ParseContext)
+    metadata.get(HttpHeaders.CONTENT_TYPE)
+  }
+
   def isJarFileType(file: File): Boolean = {
     if (!file.exists || !file.isFile) {
       throw new RuntimeException("The file does not exist or the path is a 
directory")
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/WebMvcConfig.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/WebMvcConfig.java
index 52164d960..92c66c303 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/WebMvcConfig.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/config/WebMvcConfig.java
@@ -79,6 +79,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
 
   @Override
   public void addInterceptors(InterceptorRegistry registry) {
-    
registry.addInterceptor(uploadFileTypeInterceptor).addPathPatterns("/flink/app/upload");
+    registry
+        .addInterceptor(uploadFileTypeInterceptor)
+        .addPathPatterns("/flink/app/upload", "/resource/upload");
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/interceptor/UploadFileTypeInterceptor.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/interceptor/UploadFileTypeInterceptor.java
index 4af12c99b..169c8f457 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/interceptor/UploadFileTypeInterceptor.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/interceptor/UploadFileTypeInterceptor.java
@@ -44,9 +44,13 @@ public class UploadFileTypeInterceptor implements 
HandlerInterceptor {
         MultipartFile multipartFile = multipartRequest.getFile(file);
         ApiAlertException.throwIfNull(
             multipartFile, "File to upload can't be null. Upload file 
failed.");
-        boolean fileType = 
FileUtils.isJarFileType(multipartFile.getInputStream());
+        boolean isJarOrPyFile =
+            FileUtils.isJarFileType(multipartFile.getInputStream())
+                || FileUtils.isPythonFileType(
+                    multipartFile.getContentType(), 
multipartFile.getInputStream());
         ApiAlertException.throwIfFalse(
-            fileType, "Illegal file type, Only support standard jar files. 
Upload file failed.");
+            isJarOrPyFile,
+            "Illegal file type, Only support standard jar or py files. Upload 
file failed.");
       }
     }
     return true;

Reply via email to