在 Content-Type:multipart/form-data 的情况下,如何一次从 Flask 请求对象中获取多个图像?

How to get multiple images from Flask request object at once in case of Content-Type:multipart/form-data?

我应该从请求中获取多个图像文件,但我找不到正确拆分字节字符串 request.files[key].read() 以从中提取 np.ndarrays 的方法。

files[key] 只给出一个在 HTML 中有 name=key 的对象,而 .read() 只给出这个文件的数据。所以没必要拆分。

如果你有很多带有 name=key 的文件,那么你需要 files.getlist(key) 来获取所有文件的列表,然后使用 for-loop 分别读取每个文件。

for item in request.files.getlist('image'):
    data = item.read()
    print('len:', len(data))

最小工作示例:

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def image():
    if request.method == "POST":
        #print('args :', request.args)
        #print('form :', request.form)
        #print('json :', request.json)
        #print('files:', request.files)
        print(request.files['image'])
        print(request.files.getlist('image'))
        
        for item in request.files.getlist('image'):
            data = item.read()
            print('len:', len(data))
        
    return render_template_string('''
<form method="POST" enctype="multipart/form-data">
Single image: <input type="file" name="image"/></br>
Multiple images: <input type="file" name="image" multiple/></br>
<button type="submit" name="button" value="send">Send</button>
</form>
''')

if __name__ == '__main__':
    #app.debug = True 
    app.run()