file.py 1.1 KB

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