| | from flask import request |
| | from flask_login import current_user |
| | from flask_restful import Resource, marshal_with |
| |
|
| | import services |
| | from configs import dify_config |
| | from constants import DOCUMENT_EXTENSIONS |
| | from controllers.common.errors import FilenameNotExistsError |
| | from controllers.console.wraps import ( |
| | account_initialization_required, |
| | cloud_edition_billing_resource_check, |
| | setup_required, |
| | ) |
| | from fields.file_fields import file_fields, upload_config_fields |
| | from libs.login import login_required |
| | from services.file_service import FileService |
| |
|
| | from .errors import ( |
| | FileTooLargeError, |
| | NoFileUploadedError, |
| | TooManyFilesError, |
| | UnsupportedFileTypeError, |
| | ) |
| |
|
| | PREVIEW_WORDS_LIMIT = 3000 |
| |
|
| |
|
| | class FileApi(Resource): |
| | @setup_required |
| | @login_required |
| | @account_initialization_required |
| | @marshal_with(upload_config_fields) |
| | def get(self): |
| | return { |
| | "file_size_limit": dify_config.UPLOAD_FILE_SIZE_LIMIT, |
| | "batch_count_limit": dify_config.UPLOAD_FILE_BATCH_LIMIT, |
| | "image_file_size_limit": dify_config.UPLOAD_IMAGE_FILE_SIZE_LIMIT, |
| | "video_file_size_limit": dify_config.UPLOAD_VIDEO_FILE_SIZE_LIMIT, |
| | "audio_file_size_limit": dify_config.UPLOAD_AUDIO_FILE_SIZE_LIMIT, |
| | "workflow_file_upload_limit": dify_config.WORKFLOW_FILE_UPLOAD_LIMIT, |
| | }, 200 |
| |
|
| | @setup_required |
| | @login_required |
| | @account_initialization_required |
| | @marshal_with(file_fields) |
| | @cloud_edition_billing_resource_check("documents") |
| | def post(self): |
| | file = request.files["file"] |
| | source = request.form.get("source") |
| |
|
| | if "file" not in request.files: |
| | raise NoFileUploadedError() |
| |
|
| | if len(request.files) > 1: |
| | raise TooManyFilesError() |
| |
|
| | if not file.filename: |
| | raise FilenameNotExistsError |
| |
|
| | if source not in ("datasets", None): |
| | source = None |
| |
|
| | try: |
| | upload_file = FileService.upload_file( |
| | filename=file.filename, |
| | content=file.read(), |
| | mimetype=file.mimetype, |
| | user=current_user, |
| | source=source, |
| | ) |
| | except services.errors.file.FileTooLargeError as file_too_large_error: |
| | raise FileTooLargeError(file_too_large_error.description) |
| | except services.errors.file.UnsupportedFileTypeError: |
| | raise UnsupportedFileTypeError() |
| |
|
| | return upload_file, 201 |
| |
|
| |
|
| | class FilePreviewApi(Resource): |
| | @setup_required |
| | @login_required |
| | @account_initialization_required |
| | def get(self, file_id): |
| | file_id = str(file_id) |
| | text = FileService.get_file_preview(file_id) |
| | return {"content": text} |
| |
|
| |
|
| | class FileSupportTypeApi(Resource): |
| | @setup_required |
| | @login_required |
| | @account_initialization_required |
| | def get(self): |
| | return {"allowed_extensions": DOCUMENT_EXTENSIONS} |
| |
|