From 93833849c119153e8661e0a7c795efa962ec2984 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Fri, 6 Jun 2025 11:42:31 +0800 Subject: [PATCH] refactor: file to oss --- .../impl/base_document_extract_node.py | 2 +- .../impl/base_image_generate_node.py | 2 +- .../impl/base_image_understand_node.py | 2 +- .../impl/base_text_to_speech_node.py | 2 +- .../handle/impl/table/xlsx_parse_table_handle.py | 2 +- apps/common/handle/impl/text/doc_split_handle.py | 2 +- apps/knowledge/serializers/common.py | 4 ++-- apps/knowledge/serializers/document.py | 2 +- apps/knowledge/urls.py | 2 -- apps/knowledge/views/__init__.py | 1 - apps/maxkb/urls.py | 3 ++- apps/oss/__init__.py | 0 apps/oss/admin.py | 3 +++ apps/oss/apps.py | 6 ++++++ apps/oss/migrations/__init__.py | 0 apps/oss/models.py | 3 +++ apps/oss/serializers/__init__.py | 1 + apps/{knowledge => oss}/serializers/file.py | 2 +- apps/oss/tests.py | 3 +++ apps/oss/urls.py | 10 ++++++++++ apps/oss/views.py | 3 +++ apps/oss/views/__init__.py | 1 + apps/{knowledge => oss}/views/file.py | 2 +- apps/tools/serializers/tool.py | 2 +- 24 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 apps/oss/__init__.py create mode 100644 apps/oss/admin.py create mode 100644 apps/oss/apps.py create mode 100644 apps/oss/migrations/__init__.py create mode 100644 apps/oss/models.py create mode 100644 apps/oss/serializers/__init__.py rename apps/{knowledge => oss}/serializers/file.py (99%) create mode 100644 apps/oss/tests.py create mode 100644 apps/oss/urls.py create mode 100644 apps/oss/views.py create mode 100644 apps/oss/views/__init__.py rename apps/{knowledge => oss}/views/file.py (97%) diff --git a/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py index 33b25f2be..e538fcefd 100644 --- a/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py +++ b/apps/application/flow/step_node/document_extract_node/impl/base_document_extract_node.py @@ -9,7 +9,7 @@ from application.flow.i_step_node import NodeResult from application.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode from knowledge.models import File from knowledge.serializers.document import split_handles, parse_table_handle_list, FileBufferHandle -from knowledge.serializers.file import FileSerializer +from oss.serializers.file import FileSerializer def bytes_to_uploaded_file(file_bytes, file_name="file.txt"): diff --git a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py index f6c6c4ba7..2feba6fd1 100644 --- a/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py +++ b/apps/application/flow/step_node/image_generate_step_node/impl/base_image_generate_node.py @@ -8,7 +8,7 @@ from langchain_core.messages import BaseMessage, HumanMessage, AIMessage from application.flow.i_step_node import NodeResult from application.flow.step_node.image_generate_step_node.i_image_generate_node import IImageGenerateNode from common.utils.common import bytes_to_uploaded_file -from knowledge.serializers.file import FileSerializer +from oss.serializers.file import FileSerializer from models_provider.tools import get_model_instance_by_model_user_id diff --git a/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py index 2296f34e3..9acfaced2 100644 --- a/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py +++ b/apps/application/flow/step_node/image_understand_step_node/impl/base_image_understand_node.py @@ -130,7 +130,7 @@ class BaseImageUnderstandNode(IImageUnderstandNode): file_id_list = [image.get('file_id') for image in image_list] return HumanMessage(content=[ {'type': 'text', 'text': data['question']}, - *[{'type': 'image_url', 'image_url': {'url': f'/api/file/{file_id}'}} for file_id in file_id_list] + *[{'type': 'image_url', 'image_url': {'url': f'/oss/file/{file_id}'}} for file_id in file_id_list] ]) return HumanMessage(content=chat_record.problem_text) diff --git a/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py index 5191b3676..473143bd1 100644 --- a/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py +++ b/apps/application/flow/step_node/text_to_speech_step_node/impl/base_text_to_speech_node.py @@ -6,7 +6,7 @@ from django.core.files.uploadedfile import InMemoryUploadedFile from application.flow.i_step_node import NodeResult from application.flow.step_node.text_to_speech_step_node.i_text_to_speech_node import ITextToSpeechNode -from knowledge.serializers.file import FileSerializer +from oss.serializers.file import FileSerializer from models_provider.tools import get_model_instance_by_model_user_id diff --git a/apps/common/handle/impl/table/xlsx_parse_table_handle.py b/apps/common/handle/impl/table/xlsx_parse_table_handle.py index 8693a260c..65188e71b 100644 --- a/apps/common/handle/impl/table/xlsx_parse_table_handle.py +++ b/apps/common/handle/impl/table/xlsx_parse_table_handle.py @@ -110,7 +110,7 @@ class XlsxParseTableHandle(BaseParseTableHandle): md_tables += md_table + '\n\n' - md_tables = md_tables.replace('/api/image/', '/api/file/') + md_tables = md_tables.replace('/api/image/', '/oss/file/') return md_tables except Exception as e: max_kb.error(f'excel split handle error: {e}') diff --git a/apps/common/handle/impl/text/doc_split_handle.py b/apps/common/handle/impl/text/doc_split_handle.py index d43462ccb..a67bc5f8f 100644 --- a/apps/common/handle/impl/text/doc_split_handle.py +++ b/apps/common/handle/impl/text/doc_split_handle.py @@ -226,7 +226,7 @@ class DocSplitHandle(BaseSplitHandle): doc = Document(io.BytesIO(buffer)) content = self.to_md(doc, image_list, get_image_id_func()) if len(image_list) > 0: - content = content.replace('/api/image/', '/api/file/') + content = content.replace('/api/image/', '/oss/file/') save_image(image_list) return content except BaseException as e: diff --git a/apps/knowledge/serializers/common.py b/apps/knowledge/serializers/common.py index 148ee2176..3499ada4e 100644 --- a/apps/knowledge/serializers/common.py +++ b/apps/knowledge/serializers/common.py @@ -167,8 +167,8 @@ def write_image(zip_path: str, image_list: List[str]): search = re.search("\(.*\)", image) if search: text = search.group() - if text.startswith('(/api/file/'): - r = text.replace('(/api/file/', '').replace(')', '') + if text.startswith('(/oss/file/'): + r = text.replace('(/oss/file/', '').replace(')', '') r = r.strip().split(" ")[0] if not is_valid_uuid(r): break diff --git a/apps/knowledge/serializers/document.py b/apps/knowledge/serializers/document.py index 4f454c5f5..0ad13209f 100644 --- a/apps/knowledge/serializers/document.py +++ b/apps/knowledge/serializers/document.py @@ -46,7 +46,6 @@ from knowledge.models import Knowledge, Paragraph, Problem, Document, KnowledgeT TaskType, File, FileSourceType from knowledge.serializers.common import ProblemParagraphManage, BatchSerializer, \ get_embedding_model_id_by_knowledge_id, MetaSerializer, write_image, zip_dir -from knowledge.serializers.file import FileSerializer from knowledge.serializers.paragraph import ParagraphSerializers, ParagraphInstanceSerializer, \ delete_problems_and_mappings from knowledge.task.embedding import embedding_by_document, delete_embedding_by_document_list, \ @@ -56,6 +55,7 @@ from knowledge.task.generate import generate_related_by_document_id from knowledge.task.sync import sync_web_document from maxkb.const import PROJECT_DIR from models_provider.models import Model +from oss.serializers.file import FileSerializer default_split_handle = TextSplitHandle() split_handles = [ diff --git a/apps/knowledge/urls.py b/apps/knowledge/urls.py index de06faad9..6e1d4c0a5 100644 --- a/apps/knowledge/urls.py +++ b/apps/knowledge/urls.py @@ -56,7 +56,5 @@ urlpatterns = [ path('workspace//knowledge//problem//', views.ProblemView.Page.as_view()), path('workspace//knowledge//document//', views.DocumentView.Page.as_view()), path('workspace//knowledge//', views.KnowledgeView.Page.as_view()), - path('file', views.FileView.as_view()), - path('file/', views.FileView.Operate.as_view()), ] diff --git a/apps/knowledge/views/__init__.py b/apps/knowledge/views/__init__.py index 0ba89c800..586b2d335 100644 --- a/apps/knowledge/views/__init__.py +++ b/apps/knowledge/views/__init__.py @@ -2,4 +2,3 @@ from .document import * from .knowledge import * from .paragraph import * from .problem import * -from .file import * diff --git a/apps/maxkb/urls.py b/apps/maxkb/urls.py index 10e5690ca..0e9992471 100644 --- a/apps/maxkb/urls.py +++ b/apps/maxkb/urls.py @@ -28,7 +28,8 @@ urlpatterns = [ path("api/", include("knowledge.urls")), path("api/", include("system_manage.urls")), path("api/", include("application.urls")), - path("chat/", include("chat.urls")) + path("chat/", include("chat.urls")), + path('oss/', include('oss.urls')), ] urlpatterns += [ path('schema/', SpectacularAPIView.as_view(), name='schema'), # schema的配置文件的路由,下面两个ui也是根据这个配置文件来生成的 diff --git a/apps/oss/__init__.py b/apps/oss/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/oss/admin.py b/apps/oss/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/apps/oss/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apps/oss/apps.py b/apps/oss/apps.py new file mode 100644 index 000000000..e17706978 --- /dev/null +++ b/apps/oss/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class OssConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'oss' diff --git a/apps/oss/migrations/__init__.py b/apps/oss/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/oss/models.py b/apps/oss/models.py new file mode 100644 index 000000000..71a836239 --- /dev/null +++ b/apps/oss/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/apps/oss/serializers/__init__.py b/apps/oss/serializers/__init__.py new file mode 100644 index 000000000..bf893c064 --- /dev/null +++ b/apps/oss/serializers/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 \ No newline at end of file diff --git a/apps/knowledge/serializers/file.py b/apps/oss/serializers/file.py similarity index 99% rename from apps/knowledge/serializers/file.py rename to apps/oss/serializers/file.py index 8881bdeab..a167f6e87 100644 --- a/apps/knowledge/serializers/file.py +++ b/apps/oss/serializers/file.py @@ -65,7 +65,7 @@ class FileSerializer(serializers.Serializer): file_id = meta.get('file_id', uuid.uuid7()) file = File(id=file_id, file_name=self.data.get('file').name, meta=meta) file.save(self.data.get('file').read()) - return f'/api/file/{file_id}' + return f'/oss/file/{file_id}' class Operate(serializers.Serializer): id = serializers.UUIDField(required=True) diff --git a/apps/oss/tests.py b/apps/oss/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/apps/oss/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/oss/urls.py b/apps/oss/urls.py new file mode 100644 index 000000000..3005b1c8e --- /dev/null +++ b/apps/oss/urls.py @@ -0,0 +1,10 @@ +from django.urls import path + +from . import views + +app_name = 'oss' + +urlpatterns = [ + path('file', views.FileView.as_view()), + path('file/', views.FileView.Operate.as_view()), +] diff --git a/apps/oss/views.py b/apps/oss/views.py new file mode 100644 index 000000000..91ea44a21 --- /dev/null +++ b/apps/oss/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/apps/oss/views/__init__.py b/apps/oss/views/__init__.py new file mode 100644 index 000000000..1082199e4 --- /dev/null +++ b/apps/oss/views/__init__.py @@ -0,0 +1 @@ +from .file import * \ No newline at end of file diff --git a/apps/knowledge/views/file.py b/apps/oss/views/file.py similarity index 97% rename from apps/knowledge/views/file.py rename to apps/oss/views/file.py index 0bfd5c3cc..a6e11b305 100644 --- a/apps/knowledge/views/file.py +++ b/apps/oss/views/file.py @@ -9,7 +9,7 @@ from common.auth import TokenAuth from common.log.log import log from common.result import result from knowledge.api.file import FileUploadAPI, FileGetAPI -from knowledge.serializers.file import FileSerializer +from oss.serializers.file import FileSerializer class FileView(APIView): diff --git a/apps/tools/serializers/tool.py b/apps/tools/serializers/tool.py index f47f463f3..1b6420a42 100644 --- a/apps/tools/serializers/tool.py +++ b/apps/tools/serializers/tool.py @@ -426,7 +426,7 @@ class ToolSerializer(serializers.Serializer): ) file.save(self.data.get('image').read()) - tool.icon = f'/api/file/{file_id}' + tool.icon = f'/oss/file/{file_id}' tool.save() return tool.icon