diff --git a/apps/oss/serializers/file.py b/apps/oss/serializers/file.py
index cfa22c016..c3584caee 100644
--- a/apps/oss/serializers/file.py
+++ b/apps/oss/serializers/file.py
@@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from common.exception.app_exception import NotFound404
-from knowledge.models import File
+from knowledge.models import File, FileSourceType
from tools.serializers.tool import UploadedFileField
mime_types = {
@@ -57,6 +57,13 @@ mime_types = {
class FileSerializer(serializers.Serializer):
file = UploadedFileField(required=True, label=_('file'))
meta = serializers.JSONField(required=False, allow_null=True)
+ source_id = serializers.CharField(
+ required=False, allow_null=True, label=_('source id'), default=FileSourceType.TEMPORARY_120_MINUTE.value
+ )
+ source_type = serializers.ChoiceField(
+ choices=FileSourceType.choices, required=False, allow_null=True, label=_('source type'),
+ default=FileSourceType.TEMPORARY_120_MINUTE
+ )
def upload(self, with_valid=True):
if with_valid:
@@ -65,7 +72,13 @@ class FileSerializer(serializers.Serializer):
if not meta:
meta = {'debug': True}
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,
+ source_id=self.data.get('source_id') or FileSourceType.TEMPORARY_120_MINUTE.value,
+ source_type=self.data.get('source_type') or FileSourceType.TEMPORARY_120_MINUTE
+ )
file.save(self.data.get('file').read())
return f'./oss/file/{file_id}'
diff --git a/apps/oss/views/file.py b/apps/oss/views/file.py
index 21f2c4be2..12fdb8070 100644
--- a/apps/oss/views/file.py
+++ b/apps/oss/views/file.py
@@ -42,7 +42,11 @@ class FileView(APIView):
)
@log(menu='file', operate='Upload file')
def post(self, request: Request):
- return result.success(FileSerializer(data={'file': request.FILES.get('file')}).upload())
+ return result.success(FileSerializer(data={
+ 'file': request.FILES.get('file'),
+ 'source_id': request.data.get('source_id'),
+ 'source_type': request.data.get('source_type'),
+ }).upload())
class Operate(APIView):
authentication_classes = [TokenAuth]
diff --git a/ui/src/views/document/upload/SetRules.vue b/ui/src/views/document/upload/SetRules.vue
index 0ee40f93b..c25256122 100644
--- a/ui/src/views/document/upload/SetRules.vue
+++ b/ui/src/views/document/upload/SetRules.vue
@@ -112,7 +112,7 @@
{{ $t('views.document.setRules.title.preview') }}
-
+
diff --git a/ui/src/views/knowledge/component/EditParagraphDialog.vue b/ui/src/views/knowledge/component/EditParagraphDialog.vue
index 9fffaddc7..37e104625 100644
--- a/ui/src/views/knowledge/component/EditParagraphDialog.vue
+++ b/ui/src/views/knowledge/component/EditParagraphDialog.vue
@@ -10,7 +10,7 @@
>
-
+
@@ -52,7 +52,7 @@
@@ -69,7 +69,8 @@ import { cloneDeep } from 'lodash'
import ParagraphForm from '@/views/paragraph/component/ParagraphForm.vue'
const props = defineProps({
- isConnect: Boolean
+ isConnect: Boolean,
+ knowledgeId: String
})
const emit = defineEmits(['updateContent'])
diff --git a/ui/src/views/knowledge/component/ParagraphList.vue b/ui/src/views/knowledge/component/ParagraphList.vue
index ad92f553b..3845df895 100644
--- a/ui/src/views/knowledge/component/ParagraphList.vue
+++ b/ui/src/views/knowledge/component/ParagraphList.vue
@@ -42,6 +42,7 @@
ref="EditParagraphDialogRef"
@updateContent="updateContent"
:isConnect="isConnect"
+ :knowledge-id="knowledgeId"
/>
@@ -62,7 +63,14 @@ const editHandle = (item: any, cIndex: number) => {
EditParagraphDialogRef.value.open(item)
}
-const props = defineProps<{ modelValue: Array; isConnect: boolean }>()
+const props = defineProps({
+ modelValue: {
+ type: Array,
+ default: () => []
+ },
+ isConnect: Boolean,
+ knowledgeId: String
+})
const paragraph_list = computed(() => {
return props.modelValue.slice(0, page_size.value * (current_page.value - 1) + page_size.value)
diff --git a/ui/src/views/knowledge/component/ParagraphPreview.vue b/ui/src/views/knowledge/component/ParagraphPreview.vue
index 2ca96adee..b0d2123ca 100644
--- a/ui/src/views/knowledge/component/ParagraphPreview.vue
+++ b/ui/src/views/knowledge/component/ParagraphPreview.vue
@@ -15,7 +15,7 @@
@@ -32,7 +32,8 @@ defineProps({
type: Array,
default: () => []
},
- isConnect: Boolean
+ isConnect: Boolean,
+ knowledgeId: String
})
const activeName = ref(0)
diff --git a/ui/src/views/paragraph/component/ParagraphDialog.vue b/ui/src/views/paragraph/component/ParagraphDialog.vue
index a050af35d..4a4b98944 100644
--- a/ui/src/views/paragraph/component/ParagraphDialog.vue
+++ b/ui/src/views/paragraph/component/ParagraphDialog.vue
@@ -19,7 +19,7 @@
-
+
diff --git a/ui/src/views/paragraph/component/ParagraphForm.vue b/ui/src/views/paragraph/component/ParagraphForm.vue
index 70d500e50..b703fa3d6 100644
--- a/ui/src/views/paragraph/component/ParagraphForm.vue
+++ b/ui/src/views/paragraph/component/ParagraphForm.vue
@@ -54,7 +54,8 @@ const props = defineProps({
type: Object,
default: () => {}
},
- isEdit: Boolean
+ isEdit: Boolean,
+ knowledgeId: String
})
const toolbars = [
@@ -120,6 +121,7 @@ watch(
watch(
() => props.isEdit,
(value) => {
+ console.log(props.data, props.knowledgeId)
if (!value) {
paragraphFormRef.value?.clearValidate()
}
@@ -145,6 +147,8 @@ const onUploadImg = async (files: any, callback: any) => {
return new Promise((rev, rej) => {
const fd = new FormData()
fd.append('file', file)
+ fd.append('source_id', props.knowledgeId as string)
+ fd.append('source_type', 'KNOWLEDGE')
imageApi
.postImage(fd)