e使用上传器中内置的多个文件上传

时间:2013-07-23 04:52:15

标签: python flask

Uploading Files in flask已在文档中正确解释。但我想知道相同的内置烧瓶文件上传是否可用于多次上传。 我经历了this answer,但我无法完成它。它说“烧瓶”没有定义。不确定我是否遗漏了一些要导入的模块,或者我不知道使用flask.request.files的方法getlist

我的表单如下:

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

,路线如下:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
    files = request.files.getlist['file[]']
    for file in files:
        if file and allowed_file(file.filename):
            #filename = secure_filename(file.filename)
            upload(filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('uploaded_file',
                                filename=filename))

如果我用“file []替换文件”它会起作用吗?我可以选择多个文件,但烧瓶接受并打印只选择一个文件,只上传一个。看起来我在这里错过了一些愚蠢的东西。

===== EDITED ==

我在上面编辑了以下建议。

===== ADDITION ====

还需要一个函数来保持文件名迭代并保存它。

def upload(filename):
    filename = 'https://localhost/uploads/' + filename

并在上面的for循环中调用此函数。 做完了!

不确定它是否是真正的解决方案,但它确实可以解决问题。

1 个答案:

答案 0 :(得分:7)

您需要调用getlistrequest.files方法(werkzeug.datastructures.MultiDict的实例):

files = request.files.getlist('file')
for file in files:
    hande_file(file)

handle_file可能会像这样实现:

def handle_file(f):
    if not allowed_file(f.filename):
        return

    filename = secure_filename(f.filename)
    f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)