code: def upload_file(_props_key, file, **kw):
      
      kwargs = {}
      if _props_key is not None:
          conf = config("STORAGE_UPLOAD_FILE_PROPS")
          if not conf:
              raise ValueError("Missing STORAGE_UPLOAD_FILE_PROPS in config")
          if _props_key not in conf:
              raise ValueError("Missing '%s' in config STORAGE_UPLOAD_FILE_PROPS" % _props_key)
          kwargs.update(conf.get(_props_key))
      kwargs.update(kw)
  
      return signals.upload_file(lambda: storage.upload(file, **kwargs))
docs: Wrapper around storage.upload to upload a file conveniently by using set 
      properties, so no need to keep rewriting the same code.
      config file must have STORAGE_UPLOAD_FILE_PROPS where it contains k/v, ie:
  
      STORAGE_UPLOAD_FILE_PROPS = {
          "profile-image": {
              "extensions": ["jpg", "jpeg", "gif", "png"],
              "prefix": "/profile-image/",
              "public": True
          }, 
          ...
      }
  
      upload_file("profile-image", my_file)
      :param _props_key: (str) a key available in config.STORAGE_UPLOAD_FILE_PROPS
      :param file: FileStorage object or string location
      :param kw: extra **kw for 
      :return: Storage object