Потоковая передача загруженного файла через flask API в хранилище MinIO - PullRequest
2 голосов
/ 29 мая 2020

В нашем flask API у нас есть конечная точка для загрузки документа. Эта конечная точка получает загруженный документ, выполняет некоторые проверки и загружает этот документ в MinIO. Мы хотим передать полученный документ прямо в удаленное хранилище, не обрабатывая его через API.

Одна из идей - сделать следующее:

@app.route('/upload', methods=['POST'])
def upload():
   upload_url = get_presigned_upload_url()
   response = requests.put(url=upload_url, files={'file': request.stream})  

Я вижу две проблемы в приведенный выше код:

1- Как я могу убедиться, что поток состоит только из одного файла

2- Как я могу извлечь mimetype из фактического файла, не просто доверяя расширению файла

1 Ответ

0 голосов
/ 02 июня 2020

Следуя предложению здесь для загрузки больших файлов, я смог получить всю необходимую мне информацию, включая тип mime и количество загруженных файлов.

Код, который я использовал :

@app.route('/upload', methods=['POST'])
def upload():
   upload_url = get_presigned_upload_url()

   def custom_stream_factory(total_content_length, filename, content_type, content_length=None):
    import tempfile
    tmpfile = tempfile.NamedTemporaryFile('wb+', prefix='flaskapp', suffix='.nc')
    return tmpfile

    import werkzeug, flask
    stream, form, files = werkzeug.formparser.parse_form_data(flask.request.environ,                                     
       stream_factory=custom_stream_factory)

     files_list = []
     for fil in files.values():
         files_list.append(
           ('file', (fil.filename, fil, fil.mimetype))
         )
         break
     response = requests.put(url=upload_url, files=files_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...