用 Flask 上传多个文件

有没有一种方法可以用 Flask 接收多个上传的文件? 我试过以下方法:

<form method="POST" enctype="multipart/form-data" action="/upload">
<input type="file" name="file[]" multiple="">
<input type="submit" value="add">
</form>

然后打印出 request.files['file']的内容:

@app.route('/upload', methods=['POST'])
def upload():
if not _upload_dir:
raise ValueError('Uploads are disabled.')


uploaded_file = flask.request.files['file']
print uploaded_file
media.add_for_upload(uploaded_file, _upload_dir)
return flask.redirect(flask.url_for('_main'))

如果我上传多个文件,它只打印集合中的第一个文件:

<FileStorage: u'test_file.mp3' ('audio/mp3')>

是否有一种方法来接收多个文件使用 Flask 的内置上传处理? 感谢任何帮助!

92401 次浏览

You can use method getlist of flask.request.files, for example:

@app.route("/upload", methods=["POST"])
def upload():
uploaded_files = flask.request.files.getlist("file[]")
print uploaded_files
return ""

this is a working solution for flask version '1.0.2':

images = request.files.to_dict() #convert multidict to dict
for image in images:     #image will be the key
print(images[image])        #this line will print value for the image key
file_name = images[image].filename
images[image].save(some_destination)

basically, images[image] has an image file with save function added to it Now do whatever you like to do with the data.

Using Flask 1.0.2+:

files = request.files.getlist("images")

Where images is the key of the key/value pair. With the Value being the multiple images.

@app.route('/upload', methods=['GET','POST'])
def upload():
if flask.request.method == "POST":
files = flask.request.files.getlist("file")
for file in files:
file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))

It works for me.

for UPLOAD_FOLDER if you need add this just after app = flask.Flask(name)

UPLOAD_FOLDER = 'static/upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER