|  | @@ -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}"
 |