file.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from flask import request
  2. from flask_restful import Resource, marshal_with
  3. import services
  4. from controllers.service_api import api
  5. from controllers.service_api.app.error import (
  6. FileTooLargeError,
  7. NoFileUploadedError,
  8. TooManyFilesError,
  9. UnsupportedFileTypeError,
  10. )
  11. from controllers.service_api.wraps import FetchUserArg, WhereisUserArg, validate_app_token
  12. from fields.file_fields import file_fields
  13. from models.model import App, EndUser
  14. from services.file_service import FileService
  15. class FileApi(Resource):
  16. @validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.FORM))
  17. @marshal_with(file_fields)
  18. def post(self, app_model: App, end_user: EndUser):
  19. file = request.files['file']
  20. # check file
  21. if 'file' not in request.files:
  22. raise NoFileUploadedError()
  23. if not file.mimetype:
  24. raise UnsupportedFileTypeError()
  25. if len(request.files) > 1:
  26. raise TooManyFilesError()
  27. try:
  28. upload_file = FileService.upload_file(file, end_user)
  29. except services.errors.file.FileTooLargeError as file_too_large_error:
  30. raise FileTooLargeError(file_too_large_error.description)
  31. except services.errors.file.UnsupportedFileTypeError:
  32. raise UnsupportedFileTypeError()
  33. return upload_file, 201
  34. api.add_resource(FileApi, '/files/upload')