refactor: file to oss

This commit is contained in:
wxg0103 2025-06-06 11:42:31 +08:00
parent fb0d5b0de7
commit 93833849c1
24 changed files with 44 additions and 16 deletions

View File

@ -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 application.flow.step_node.document_extract_node.i_document_extract_node import IDocumentExtractNode
from knowledge.models import File from knowledge.models import File
from knowledge.serializers.document import split_handles, parse_table_handle_list, FileBufferHandle 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"): def bytes_to_uploaded_file(file_bytes, file_name="file.txt"):

View File

@ -8,7 +8,7 @@ from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
from application.flow.i_step_node import NodeResult from application.flow.i_step_node import NodeResult
from application.flow.step_node.image_generate_step_node.i_image_generate_node import IImageGenerateNode 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 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 from models_provider.tools import get_model_instance_by_model_user_id

View File

@ -130,7 +130,7 @@ class BaseImageUnderstandNode(IImageUnderstandNode):
file_id_list = [image.get('file_id') for image in image_list] file_id_list = [image.get('file_id') for image in image_list]
return HumanMessage(content=[ return HumanMessage(content=[
{'type': 'text', 'text': data['question']}, {'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) return HumanMessage(content=chat_record.problem_text)

View File

@ -6,7 +6,7 @@ from django.core.files.uploadedfile import InMemoryUploadedFile
from application.flow.i_step_node import NodeResult 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 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 from models_provider.tools import get_model_instance_by_model_user_id

View File

@ -110,7 +110,7 @@ class XlsxParseTableHandle(BaseParseTableHandle):
md_tables += md_table + '\n\n' 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 return md_tables
except Exception as e: except Exception as e:
max_kb.error(f'excel split handle error: {e}') max_kb.error(f'excel split handle error: {e}')

View File

@ -226,7 +226,7 @@ class DocSplitHandle(BaseSplitHandle):
doc = Document(io.BytesIO(buffer)) doc = Document(io.BytesIO(buffer))
content = self.to_md(doc, image_list, get_image_id_func()) content = self.to_md(doc, image_list, get_image_id_func())
if len(image_list) > 0: if len(image_list) > 0:
content = content.replace('/api/image/', '/api/file/') content = content.replace('/api/image/', '/oss/file/')
save_image(image_list) save_image(image_list)
return content return content
except BaseException as e: except BaseException as e:

View File

@ -167,8 +167,8 @@ def write_image(zip_path: str, image_list: List[str]):
search = re.search("\(.*\)", image) search = re.search("\(.*\)", image)
if search: if search:
text = search.group() text = search.group()
if text.startswith('(/api/file/'): if text.startswith('(/oss/file/'):
r = text.replace('(/api/file/', '').replace(')', '') r = text.replace('(/oss/file/', '').replace(')', '')
r = r.strip().split(" ")[0] r = r.strip().split(" ")[0]
if not is_valid_uuid(r): if not is_valid_uuid(r):
break break

View File

@ -46,7 +46,6 @@ from knowledge.models import Knowledge, Paragraph, Problem, Document, KnowledgeT
TaskType, File, FileSourceType TaskType, File, FileSourceType
from knowledge.serializers.common import ProblemParagraphManage, BatchSerializer, \ from knowledge.serializers.common import ProblemParagraphManage, BatchSerializer, \
get_embedding_model_id_by_knowledge_id, MetaSerializer, write_image, zip_dir 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, \ from knowledge.serializers.paragraph import ParagraphSerializers, ParagraphInstanceSerializer, \
delete_problems_and_mappings delete_problems_and_mappings
from knowledge.task.embedding import embedding_by_document, delete_embedding_by_document_list, \ 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 knowledge.task.sync import sync_web_document
from maxkb.const import PROJECT_DIR from maxkb.const import PROJECT_DIR
from models_provider.models import Model from models_provider.models import Model
from oss.serializers.file import FileSerializer
default_split_handle = TextSplitHandle() default_split_handle = TextSplitHandle()
split_handles = [ split_handles = [

View File

@ -56,7 +56,5 @@ urlpatterns = [
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/<int:current_page>/<int:page_size>', views.ProblemView.Page.as_view()), path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/problem/<int:current_page>/<int:page_size>', views.ProblemView.Page.as_view()),
path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<int:current_page>/<int:page_size>', views.DocumentView.Page.as_view()), path('workspace/<str:workspace_id>/knowledge/<str:knowledge_id>/document/<int:current_page>/<int:page_size>', views.DocumentView.Page.as_view()),
path('workspace/<str:workspace_id>/knowledge/<int:current_page>/<int:page_size>', views.KnowledgeView.Page.as_view()), path('workspace/<str:workspace_id>/knowledge/<int:current_page>/<int:page_size>', views.KnowledgeView.Page.as_view()),
path('file', views.FileView.as_view()),
path('file/<str:file_id>', views.FileView.Operate.as_view()),
] ]

View File

@ -2,4 +2,3 @@ from .document import *
from .knowledge import * from .knowledge import *
from .paragraph import * from .paragraph import *
from .problem import * from .problem import *
from .file import *

View File

@ -28,7 +28,8 @@ urlpatterns = [
path("api/", include("knowledge.urls")), path("api/", include("knowledge.urls")),
path("api/", include("system_manage.urls")), path("api/", include("system_manage.urls")),
path("api/", include("application.urls")), path("api/", include("application.urls")),
path("chat/", include("chat.urls")) path("chat/", include("chat.urls")),
path('oss/', include('oss.urls')),
] ]
urlpatterns += [ urlpatterns += [
path('schema/', SpectacularAPIView.as_view(), name='schema'), # schema的配置文件的路由下面两个ui也是根据这个配置文件来生成的 path('schema/', SpectacularAPIView.as_view(), name='schema'), # schema的配置文件的路由下面两个ui也是根据这个配置文件来生成的

0
apps/oss/__init__.py Normal file
View File

3
apps/oss/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
apps/oss/apps.py Normal file
View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class OssConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'oss'

View File

3
apps/oss/models.py Normal file
View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1 @@
# coding=utf-8

View File

@ -65,7 +65,7 @@ class FileSerializer(serializers.Serializer):
file_id = meta.get('file_id', uuid.uuid7()) file_id = meta.get('file_id', uuid.uuid7())
file = File(id=file_id, file_name=self.data.get('file').name, meta=meta) file = File(id=file_id, file_name=self.data.get('file').name, meta=meta)
file.save(self.data.get('file').read()) file.save(self.data.get('file').read())
return f'/api/file/{file_id}' return f'/oss/file/{file_id}'
class Operate(serializers.Serializer): class Operate(serializers.Serializer):
id = serializers.UUIDField(required=True) id = serializers.UUIDField(required=True)

3
apps/oss/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

10
apps/oss/urls.py Normal file
View File

@ -0,0 +1,10 @@
from django.urls import path
from . import views
app_name = 'oss'
urlpatterns = [
path('file', views.FileView.as_view()),
path('file/<str:file_id>', views.FileView.Operate.as_view()),
]

3
apps/oss/views.py Normal file
View File

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@ -0,0 +1 @@
from .file import *

View File

@ -9,7 +9,7 @@ from common.auth import TokenAuth
from common.log.log import log from common.log.log import log
from common.result import result from common.result import result
from knowledge.api.file import FileUploadAPI, FileGetAPI from knowledge.api.file import FileUploadAPI, FileGetAPI
from knowledge.serializers.file import FileSerializer from oss.serializers.file import FileSerializer
class FileView(APIView): class FileView(APIView):

View File

@ -426,7 +426,7 @@ class ToolSerializer(serializers.Serializer):
) )
file.save(self.data.get('image').read()) file.save(self.data.get('image').read())
tool.icon = f'/api/file/{file_id}' tool.icon = f'/oss/file/{file_id}'
tool.save() tool.save()
return tool.icon return tool.icon