Как отправить файл (принятый как часть запроса Multipart) в хранилище объектов MINIO в python без сохранения файла в локальном хранилище? - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь написать API на python (Falcon), чтобы принять файл из параметра multipart-form и поместить его в хранилище объектов MINIO.Проблема в том, что я хочу отправить файл в Minio без сохранения его в любом временном месте.

У клиента Minio-python есть функция, с помощью которой мы можем отправить файл.

  `put_object(bucket_name, object_name, data, length)`

, где data - данные файла, а length - общая длина объекта.Для более подробного объяснения: https://docs.min.io/docs/python-client-api-reference.html#put_object

Я столкнулся с проблемой накопления значений аргументов «data» и «length» в функции put_object.

Тип файла, принятый в классе API, - falcon_multipart.parser.Parser, который нельзя отправить в Minio.

Я могу заставить его работать, если я записываю файл в любое временное местоположение и затем читаюего из нужного места и отправьте.

Может кто-нибудь помочь мне найти решение этой проблемы?

Я попытался прочитать данные файла из объекта Parser и попытался преобразовать файл в байты io.BytesIO.Но это не сработало.

def on_post(self,req, resp):
  file = req.get_param('file')
  file_data = file.file.read()
  file_data= io.BytesIO(file_data)

  bucket_name = req.get_param('bucket_name')

  self.upload_file_to_minio(bucket_name, file, file_data)



def upload_file_to_minio(self, bucket_name, file, file_data):

  minioClient = Minio("localhost:9000", access_key='minio', secret_key='minio', secure=False)

  try:
    file_stat = sys.getsizeof(file_data)
    #file_stat = file_data.getbuffer().nbytes
    minioClient.put_object(bucket_name, "SampleFile" , file, file_stat)

  except ResponseError as err:
    print(err)

Traceback (most recent call last):
  File "/home/user/.local/lib/python3.6/site-packages/minio/helpers.py", line 382, in is_non_empty_string
    if not input_string.strip():
AttributeError: 'NoneType' object has no attribute 'strip'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...