Skip to content

Commit 5103007

Browse files
jiangbo721刘江波
authored andcommitted
fix: website remote url display error (langgenius#15217)
Co-authored-by: 刘江波 <[email protected]>
1 parent 46cb68b commit 5103007

File tree

3 files changed

+52
-32
lines changed

3 files changed

+52
-32
lines changed

api/core/file/models.py

+12-26
Original file line numberDiff line numberDiff line change
@@ -97,32 +97,18 @@ def markdown(self) -> str:
9797
return text
9898

9999
def generate_url(self) -> Optional[str]:
100-
if self.type == FileType.IMAGE:
101-
if self.transfer_method == FileTransferMethod.REMOTE_URL:
102-
return self.remote_url
103-
elif self.transfer_method == FileTransferMethod.LOCAL_FILE:
104-
if self.related_id is None:
105-
raise ValueError("Missing file related_id")
106-
return helpers.get_signed_file_url(upload_file_id=self.related_id)
107-
elif self.transfer_method == FileTransferMethod.TOOL_FILE:
108-
assert self.related_id is not None
109-
assert self.extension is not None
110-
return ToolFileParser.get_tool_file_manager().sign_file(
111-
tool_file_id=self.related_id, extension=self.extension
112-
)
113-
else:
114-
if self.transfer_method == FileTransferMethod.REMOTE_URL:
115-
return self.remote_url
116-
elif self.transfer_method == FileTransferMethod.LOCAL_FILE:
117-
if self.related_id is None:
118-
raise ValueError("Missing file related_id")
119-
return helpers.get_signed_file_url(upload_file_id=self.related_id)
120-
elif self.transfer_method == FileTransferMethod.TOOL_FILE:
121-
assert self.related_id is not None
122-
assert self.extension is not None
123-
return ToolFileParser.get_tool_file_manager().sign_file(
124-
tool_file_id=self.related_id, extension=self.extension
125-
)
100+
if self.transfer_method == FileTransferMethod.REMOTE_URL:
101+
return self.remote_url
102+
elif self.transfer_method == FileTransferMethod.LOCAL_FILE:
103+
if self.related_id is None:
104+
raise ValueError("Missing file related_id")
105+
return helpers.get_signed_file_url(upload_file_id=self.related_id)
106+
elif self.transfer_method == FileTransferMethod.TOOL_FILE:
107+
assert self.related_id is not None
108+
assert self.extension is not None
109+
return ToolFileParser.get_tool_file_manager().sign_file(
110+
tool_file_id=self.related_id, extension=self.extension
111+
)
126112

127113
def to_plugin_parameter(self) -> dict[str, Any]:
128114
return {

api/factories/file_factory.py

+34-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from sqlalchemy import select
88

99
from constants import AUDIO_EXTENSIONS, DOCUMENT_EXTENSIONS, IMAGE_EXTENSIONS, VIDEO_EXTENSIONS
10-
from core.file import File, FileBelongsTo, FileTransferMethod, FileType, FileUploadConfig
10+
from core.file import File, FileBelongsTo, FileTransferMethod, FileType, FileUploadConfig, helpers
1111
from core.helper import ssrf_proxy
1212
from extensions.ext_database import db
1313
from models import MessageFile, ToolFile, UploadFile
@@ -158,6 +158,39 @@ def _build_from_remote_url(
158158
tenant_id: str,
159159
transfer_method: FileTransferMethod,
160160
) -> File:
161+
upload_file_id = mapping.get("upload_file_id")
162+
if upload_file_id:
163+
try:
164+
uuid.UUID(upload_file_id)
165+
except ValueError:
166+
raise ValueError("Invalid upload file id format")
167+
stmt = select(UploadFile).where(
168+
UploadFile.id == upload_file_id,
169+
UploadFile.tenant_id == tenant_id,
170+
)
171+
172+
upload_file = db.session.scalar(stmt)
173+
if upload_file is None:
174+
raise ValueError("Invalid upload file")
175+
176+
file_type = FileType(mapping.get("type", "custom"))
177+
file_type = _standardize_file_type(
178+
file_type, extension="." + upload_file.extension, mime_type=upload_file.mime_type
179+
)
180+
181+
return File(
182+
id=mapping.get("id"),
183+
filename=upload_file.name,
184+
extension="." + upload_file.extension,
185+
mime_type=upload_file.mime_type,
186+
tenant_id=tenant_id,
187+
type=file_type,
188+
transfer_method=transfer_method,
189+
remote_url=helpers.get_signed_file_url(upload_file_id=str(upload_file_id)),
190+
related_id=mapping.get("upload_file_id"),
191+
size=upload_file.size,
192+
storage_key=upload_file.key,
193+
)
161194
url = mapping.get("url") or mapping.get("remote_url")
162195
if not url:
163196
raise ValueError("Invalid file url")

api/models/model.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -1081,31 +1081,32 @@ def message_files(self):
10811081

10821082
files = []
10831083
for message_file in message_files:
1084-
if message_file.transfer_method == "local_file":
1084+
if message_file.transfer_method == FileTransferMethod.LOCAL_FILE.value:
10851085
if message_file.upload_file_id is None:
10861086
raise ValueError(f"MessageFile {message_file.id} is a local file but has no upload_file_id")
10871087
file = file_factory.build_from_mapping(
10881088
mapping={
10891089
"id": message_file.id,
1090-
"upload_file_id": message_file.upload_file_id,
1091-
"transfer_method": message_file.transfer_method,
10921090
"type": message_file.type,
1091+
"transfer_method": message_file.transfer_method,
1092+
"upload_file_id": message_file.upload_file_id,
10931093
},
10941094
tenant_id=current_app.tenant_id,
10951095
)
1096-
elif message_file.transfer_method == "remote_url":
1096+
elif message_file.transfer_method == FileTransferMethod.REMOTE_URL.value:
10971097
if message_file.url is None:
10981098
raise ValueError(f"MessageFile {message_file.id} is a remote url but has no url")
10991099
file = file_factory.build_from_mapping(
11001100
mapping={
11011101
"id": message_file.id,
11021102
"type": message_file.type,
11031103
"transfer_method": message_file.transfer_method,
1104+
"upload_file_id": message_file.upload_file_id,
11041105
"url": message_file.url,
11051106
},
11061107
tenant_id=current_app.tenant_id,
11071108
)
1108-
elif message_file.transfer_method == "tool_file":
1109+
elif message_file.transfer_method == FileTransferMethod.TOOL_FILE.value:
11091110
if message_file.upload_file_id is None:
11101111
assert message_file.url is not None
11111112
message_file.upload_file_id = message_file.url.split("/")[-1].split(".")[0]

0 commit comments

Comments
 (0)