通过 flask API 将上传的文件流式传输到 MinIO 存储

Stream uploaded file via flask API to MinIO storage

在我们的烧瓶 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,而不仅仅是信任文件扩展名

按照 here 中关于上传大文件的建议,我能够获得我需要的所有信息,包括 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)