| 
					
				 | 
			
			
				@@ -2,7 +2,7 @@ import datetime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import hashlib 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import uuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from collections.abc import Generator 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from typing import Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from typing import Literal, Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from flask_login import current_user 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from werkzeug.datastructures import FileStorage 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -28,7 +28,9 @@ PREVIEW_WORDS_LIMIT = 3000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class FileService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def upload_file(file: FileStorage, user: Union[Account, EndUser]) -> UploadFile: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def upload_file( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        file: FileStorage, user: Union[Account, EndUser], source: Literal["datasets"] | None = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) -> UploadFile: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # get file name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         filename = file.filename 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not filename: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -36,11 +38,9 @@ class FileService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         extension = filename.split(".")[-1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if len(filename) > 200: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             filename = filename.split(".")[0][:200] + "." + extension 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # read file content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        file_content = file.read() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # get file size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        file_size = len(file_content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if source == "datasets" and extension not in DOCUMENT_EXTENSIONS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise UnsupportedFileTypeError() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # select file size limit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if extension in IMAGE_EXTENSIONS: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -52,6 +52,11 @@ class FileService: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             file_size_limit = dify_config.UPLOAD_FILE_SIZE_LIMIT * 1024 * 1024 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # read file content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        file_content = file.read() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # get file size 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        file_size = len(file_content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # check if the file size is exceeded 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if file_size > file_size_limit: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             message = f"File size exceeded. {file_size} > {file_size_limit}" 
			 |