瀏覽代碼

feat[plugin]:The plugin upload file change to be stored as a toolfile… (#18277)

tags/1.3.0
Dongyu Li 6 月之前
父節點
當前提交
413271eaa6
沒有連結到貢獻者的電子郵件帳戶。
共有 2 個檔案被更改,包括 17 行新增7 行删除
  1. 16
    7
      api/controllers/files/upload.py
  2. 1
    0
      api/fields/file_fields.py

+ 16
- 7
api/controllers/files/upload.py 查看文件

from mimetypes import guess_extension

from flask import request from flask import request
from flask_restful import Resource, marshal_with # type: ignore from flask_restful import Resource, marshal_with # type: ignore
from werkzeug.exceptions import Forbidden from werkzeug.exceptions import Forbidden
from controllers.inner_api.plugin.wraps import get_user from controllers.inner_api.plugin.wraps import get_user
from controllers.service_api.app.error import FileTooLargeError from controllers.service_api.app.error import FileTooLargeError
from core.file.helpers import verify_plugin_file_signature from core.file.helpers import verify_plugin_file_signature
from core.tools.tool_file_manager import ToolFileManager
from fields.file_fields import file_fields from fields.file_fields import file_fields
from services.file_service import FileService




class PluginUploadFileApi(Resource): class PluginUploadFileApi(Resource):
raise Forbidden("Invalid request.") raise Forbidden("Invalid request.")


try: try:
upload_file = FileService.upload_file(
filename=filename,
content=file.read(),
tool_file = ToolFileManager.create_file_by_raw(
user_id=user.id,
tenant_id=tenant_id,
file_binary=file.read(),
mimetype=mimetype, mimetype=mimetype,
user=user,
source=None,
filename=filename,
conversation_id=None,
) )

extension = guess_extension(tool_file.mimetype) or ".bin"
preview_url = ToolFileManager.sign_file(tool_file_id=tool_file.id, extension=extension)
tool_file.mime_type = mimetype
tool_file.extension = extension
tool_file.preview_url = preview_url
except services.errors.file.FileTooLargeError as file_too_large_error: except services.errors.file.FileTooLargeError as file_too_large_error:
raise FileTooLargeError(file_too_large_error.description) raise FileTooLargeError(file_too_large_error.description)
except services.errors.file.UnsupportedFileTypeError: except services.errors.file.UnsupportedFileTypeError:
raise UnsupportedFileTypeError() raise UnsupportedFileTypeError()


return upload_file, 201
return tool_file, 201




api.add_resource(PluginUploadFileApi, "/files/upload/for-plugin") api.add_resource(PluginUploadFileApi, "/files/upload/for-plugin")

+ 1
- 0
api/fields/file_fields.py 查看文件

"mime_type": fields.String, "mime_type": fields.String,
"created_by": fields.String, "created_by": fields.String,
"created_at": TimestampField, "created_at": TimestampField,
"preview_url": fields.String,
} }


remote_file_info_fields = { remote_file_info_fields = {

Loading…
取消
儲存