pull/21332/merge
André de Matteo 11 months ago committed by GitHub
commit dfa3e6c451
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -333,6 +333,15 @@ UPLOAD_IMAGE_FILE_SIZE_LIMIT=10
UPLOAD_VIDEO_FILE_SIZE_LIMIT=100 UPLOAD_VIDEO_FILE_SIZE_LIMIT=100
UPLOAD_AUDIO_FILE_SIZE_LIMIT=50 UPLOAD_AUDIO_FILE_SIZE_LIMIT=50
# Allowed Upload Extensions
# You can configure multiple ones, separated by commas. eg: .txt,.pdf,.doc
UPLOAD_IMAGE_ALLOWED_EXTENSIONS=.jpg,.jpeg,.png,.gif,.webp
UPLOAD_VIDEO_ALLOWED_EXTENSIONS=.mp4,.avi,.mov,.mkv,.webm
UPLOAD_AUDIO_ALLOWED_EXTENSIONS=.mp3,.wav,.ogg,.flac,.aac
UPLOAD_FILE_ALLOWED_EXTENSIONS=.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub
# Only the file extensions listed below will be accepted in the workflow input.
UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS=.json,.yaml,.yml,.zip,.tar,.gz,7z,.rar
# Model configuration # Model configuration
MULTIMODAL_SEND_FORMAT=base64 MULTIMODAL_SEND_FORMAT=base64
PROMPT_GENERATION_MAX_TOKENS=512 PROMPT_GENERATION_MAX_TOKENS=512

@ -17,6 +17,8 @@
cp middleware.env.example middleware.env cp middleware.env.example middleware.env
# change the profile to other vector database if you are not using weaviate # change the profile to other vector database if you are not using weaviate
docker compose -f docker-compose.middleware.yaml --profile weaviate -p dify up -d docker compose -f docker-compose.middleware.yaml --profile weaviate -p dify up -d
# if you use podman
# podman compose -f docker-compose.middleware.yaml --profile weaviate --env-file middleware.env -p dify up -d
cd ../api cd ../api
``` ```

@ -283,6 +283,27 @@ class FileUploadConfig(BaseSettings):
default=10, default=10,
) )
UPLOAD_IMAGE_ALLOWED_EXTENSIONS: str = Field(
description="allowed image file extensions for upload",
default="",
)
UPLOAD_VIDEO_ALLOWED_EXTENSIONS: str = Field(
description="allowed video file extensions for upload",
default="",
)
UPLOAD_AUDIO_ALLOWED_EXTENSIONS: str = Field(
description="allowed audio file extensions for upload",
default="",
)
UPLOAD_FILE_ALLOWED_EXTENSIONS: str = Field(
description="allowed other files extensions for upload",
default="",
)
UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS: str = Field(
description="allowed workflow custom files extensions for upload",
default="",
)
class HttpConfig(BaseSettings): class HttpConfig(BaseSettings):
""" """

@ -257,6 +257,20 @@ class Workflow(Base):
else: else:
return None return None
@property
def get_allowed_file_extensions(self) -> list[str]:
workflow_graph = self.graph_dict
extensions = [
ext
for node in workflow_graph.get("nodes", [])
for var in node.get("data", {}).get("variables", [])
if var.get("type") == "file"
for ext in var.get("allowed_file_extensions", [])
]
return list(set(extensions))
@property @property
def features(self) -> str: def features(self) -> str:
""" """

@ -51,6 +51,9 @@ class FileService:
if source == "datasets" and extension not in DOCUMENT_EXTENSIONS: if source == "datasets" and extension not in DOCUMENT_EXTENSIONS:
raise UnsupportedFileTypeError() raise UnsupportedFileTypeError()
if FileService.is_file_extension_allowed(extension=extension) is False:
raise UnsupportedFileTypeError()
# get file size # get file size
file_size = len(content) file_size = len(content)
@ -112,6 +115,16 @@ class FileService:
return file_size <= file_size_limit return file_size <= file_size_limit
@staticmethod
def is_file_extension_allowed(*, extension: str) -> bool:
_ext_image = dify_config.UPLOAD_IMAGE_ALLOWED_EXTENSIONS
_ext_video = dify_config.UPLOAD_VIDEO_ALLOWED_EXTENSIONS
_ext_audio = dify_config.UPLOAD_AUDIO_ALLOWED_EXTENSIONS
_ext_file = dify_config.UPLOAD_FILE_ALLOWED_EXTENSIONS
_ext_workflow = dify_config.UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS
return any(extension in _allowed for _allowed in [_ext_image, _ext_video, _ext_audio, _ext_file, _ext_workflow])
@staticmethod @staticmethod
def upload_text(text: str, text_name: str) -> UploadFile: def upload_text(text: str, text_name: str) -> UploadFile:
if len(text_name) > 200: if len(text_name) > 200:

File diff suppressed because it is too large Load Diff

@ -683,6 +683,14 @@ UPLOAD_IMAGE_FILE_SIZE_LIMIT=10
UPLOAD_VIDEO_FILE_SIZE_LIMIT=100 UPLOAD_VIDEO_FILE_SIZE_LIMIT=100
# Upload audio file size limit, default 50M. # Upload audio file size limit, default 50M.
UPLOAD_AUDIO_FILE_SIZE_LIMIT=50 UPLOAD_AUDIO_FILE_SIZE_LIMIT=50
# Allowed Upload Extensions
# You can configure multiple ones, separated by commas. eg: .txt,.pdf,.doc
UPLOAD_IMAGE_ALLOWED_EXTENSIONS=.jpg,.jpeg,.png,.gif,.webp
UPLOAD_VIDEO_ALLOWED_EXTENSIONS=.mp4,.avi,.mov,.mkv,.webm
UPLOAD_AUDIO_ALLOWED_EXTENSIONS=.mp3,.wav,.ogg,.flac,.aac
UPLOAD_FILE_ALLOWED_EXTENSIONS=.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub
# Only the file extensions listed below will be accepted in the workflow input.
UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS=.json,.yaml,.yml,.zip,.tar,.gz,7z,.rar
# ------------------------------ # ------------------------------
# Sentry Configuration # Sentry Configuration

@ -308,6 +308,11 @@ x-shared-env: &shared-api-worker-env
UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10}
UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100}
UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50}
UPLOAD_IMAGE_ALLOWED_EXTENSIONS: ${UPLOAD_IMAGE_ALLOWED_EXTENSIONS:-.jpg,.jpeg,.png,.gif,.webp}
UPLOAD_VIDEO_ALLOWED_EXTENSIONS: ${UPLOAD_VIDEO_ALLOWED_EXTENSIONS:-.mp4,.avi,.mov,.mkv,.webm}
UPLOAD_AUDIO_ALLOWED_EXTENSIONS: ${UPLOAD_AUDIO_ALLOWED_EXTENSIONS:-.mp3,.wav,.ogg,.flac,.aac}
UPLOAD_FILE_ALLOWED_EXTENSIONS: ${UPLOAD_FILE_ALLOWED_EXTENSIONS:-.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub}
UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS: ${UPLOAD_WORKFLOW_ALLOWED_EXTENSIONS:-.json,.yaml,.yml,.zip,.tar,.gz,7z,.rar}
SENTRY_DSN: ${SENTRY_DSN:-} SENTRY_DSN: ${SENTRY_DSN:-}
API_SENTRY_DSN: ${API_SENTRY_DSN:-} API_SENTRY_DSN: ${API_SENTRY_DSN:-}
API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}

Loading…
Cancel
Save