您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

image_preview.py 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from flask import Response, request
  2. from flask_restful import Resource
  3. from werkzeug.exceptions import NotFound
  4. import services
  5. from controllers.files import api
  6. from controllers.files.error import UnsupportedFileTypeError
  7. from services.account_service import TenantService
  8. from services.file_service import FileService
  9. class ImagePreviewApi(Resource):
  10. def get(self, file_id):
  11. file_id = str(file_id)
  12. timestamp = request.args.get("timestamp")
  13. nonce = request.args.get("nonce")
  14. sign = request.args.get("sign")
  15. if not timestamp or not nonce or not sign:
  16. return {"content": "Invalid request."}, 400
  17. try:
  18. generator, mimetype = FileService.get_image_preview(
  19. file_id=file_id,
  20. timestamp=timestamp,
  21. nonce=nonce,
  22. sign=sign,
  23. )
  24. except services.errors.file.UnsupportedFileTypeError:
  25. raise UnsupportedFileTypeError()
  26. return Response(generator, mimetype=mimetype)
  27. class FilePreviewApi(Resource):
  28. def get(self, file_id):
  29. file_id = str(file_id)
  30. timestamp = request.args.get("timestamp")
  31. nonce = request.args.get("nonce")
  32. sign = request.args.get("sign")
  33. if not timestamp or not nonce or not sign:
  34. return {"content": "Invalid request."}, 400
  35. try:
  36. generator, mimetype = FileService.get_signed_file_preview(
  37. file_id=file_id,
  38. timestamp=timestamp,
  39. nonce=nonce,
  40. sign=sign,
  41. )
  42. except services.errors.file.UnsupportedFileTypeError:
  43. raise UnsupportedFileTypeError()
  44. return Response(generator, mimetype=mimetype)
  45. class WorkspaceWebappLogoApi(Resource):
  46. def get(self, workspace_id):
  47. workspace_id = str(workspace_id)
  48. custom_config = TenantService.get_custom_config(workspace_id)
  49. webapp_logo_file_id = custom_config.get("replace_webapp_logo") if custom_config is not None else None
  50. if not webapp_logo_file_id:
  51. raise NotFound("webapp logo is not found")
  52. try:
  53. generator, mimetype = FileService.get_public_image_preview(
  54. webapp_logo_file_id,
  55. )
  56. except services.errors.file.UnsupportedFileTypeError:
  57. raise UnsupportedFileTypeError()
  58. return Response(generator, mimetype=mimetype)
  59. api.add_resource(ImagePreviewApi, "/files/<uuid:file_id>/image-preview")
  60. api.add_resource(FilePreviewApi, "/files/<uuid:file_id>/file-preview")
  61. api.add_resource(WorkspaceWebappLogoApi, "/files/workspaces/<uuid:workspace_id>/webapp-logo")