file.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from flask import request
  2. from flask_restful import marshal_with
  3. import services
  4. from controllers.web import api
  5. from controllers.web.error import FileTooLargeError, NoFileUploadedError, TooManyFilesError, UnsupportedFileTypeError
  6. from controllers.web.wraps import WebApiResource
  7. from fields.file_fields import file_fields
  8. from services.file_service import FileService
  9. class FileApi(WebApiResource):
  10. @marshal_with(file_fields)
  11. def post(self, app_model, end_user):
  12. # get file from request
  13. file = request.files['file']
  14. # check file
  15. if 'file' not in request.files:
  16. raise NoFileUploadedError()
  17. if len(request.files) > 1:
  18. raise TooManyFilesError()
  19. try:
  20. upload_file = FileService.upload_file(file, end_user)
  21. except services.errors.file.FileTooLargeError as file_too_large_error:
  22. raise FileTooLargeError(file_too_large_error.description)
  23. except services.errors.file.UnsupportedFileTypeError:
  24. raise UnsupportedFileTypeError()
  25. return upload_file, 201
  26. api.add_resource(FileApi, '/files/upload')