mirror of
https://github.com/langgenius/dify.git
synced 2026-09-09 22:29:28 +08:00
55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
"""ToolFile adapter for signed plugin uploads."""
|
|
|
|
from typing import override
|
|
|
|
from core.tools.signature import sign_tool_file
|
|
from core.tools.tool_file_manager import ToolFileManager, resolve_extension
|
|
from core.workflow.file_reference import build_file_reference
|
|
from services.plugin_file_upload_service import PluginFileUploadFiles, PluginFileUploadResult
|
|
|
|
|
|
class ToolFilePluginUploadGateway(PluginFileUploadFiles):
|
|
def __init__(self, *, tool_files: ToolFileManager) -> None:
|
|
self._tool_files = tool_files
|
|
|
|
@override
|
|
def store(
|
|
self,
|
|
*,
|
|
user_id: str,
|
|
tenant_id: str,
|
|
conversation_id: str | None,
|
|
content: bytes,
|
|
mimetype: str,
|
|
filename: str,
|
|
) -> PluginFileUploadResult:
|
|
tool_file = self._tool_files.create_file_by_raw(
|
|
user_id=user_id,
|
|
tenant_id=tenant_id,
|
|
conversation_id=conversation_id,
|
|
file_binary=content,
|
|
mimetype=mimetype,
|
|
filename=filename,
|
|
)
|
|
extension = resolve_extension(filename=tool_file.name, mimetype=tool_file.mimetype)
|
|
|
|
return PluginFileUploadResult(
|
|
id=tool_file.id,
|
|
reference=build_file_reference(record_id=tool_file.id),
|
|
name=tool_file.name,
|
|
size=tool_file.size,
|
|
extension=extension,
|
|
mime_type=mimetype,
|
|
preview_url=sign_tool_file(
|
|
tool_file_id=tool_file.id,
|
|
extension=extension,
|
|
for_external=True,
|
|
),
|
|
source_url=tool_file.original_url,
|
|
original_url=tool_file.original_url,
|
|
user_id=tool_file.user_id,
|
|
tenant_id=tool_file.tenant_id,
|
|
conversation_id=tool_file.conversation_id,
|
|
file_key=tool_file.file_key,
|
|
)
|