当前位置: 首页 > 面试题库 >

如何在python中使用flask上传多个文件

令狐建修
2023-03-14
问题内容

这是我上传多个文件的代码:

HTML代码:

Browse <input type="file" name="pro_attachment1" id="pro_attachment1" multiple>

密码:

pro_attachment = request.files.getlist('pro_attachment1')

for upload in pro_attachment:
    filename = upload.filename.rsplit("/")[0]
    destination = os.path.join(application.config['UPLOAD_FOLDER'], filename)
    print "Accept incoming file:", filename
    print "Save it to:", destination
    upload.save(destination)

但是它会上传单个文件,而不是多个文件。


问题答案:

在模板中,你需要mulitple在上传输入中添加属性:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="photos" multiple>
    <input type="submit" value="Submit">
</form>  

然后在查看功能中,上传的文件可以通过列表获取request.files.getlist('photos')。循环此列表并在每个项目(werkzeug.datastructures.FileStorage)上调用save()方法将它们保存在给定路径中:

import os

from flask import Flask, request, render_template, redirect

app = Flask(__name__)
app.config['UPLOAD_PATH'] = '/the/path/to/save'

@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'photo' in request.files:
        for f in request.files.getlist('photo'):
            f.save(os.path.join(app.config['UPLOAD_PATH'], f.filename))
        return 'Upload completed.'
    return render_template('upload.html')

此外,你可能需要使用secure_filename()来清洁文件名:

# ...
from werkzeug.utils import secure_filename
# ...
    for f in request.files.getlist('photo'):
        filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_PATH'], filename))
        # ...

你也可以使用此方法生成随机文件名。

完整演示
视图:

import os

from flask import Flask, request, render_template
from werkzeug.utils import secure_filename

app = Flask(__name__)  
app.config['UPLOAD_PATH'] = '/the/path/to/save'

@main.route('/upload', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit() and 'photo' in request.files:
        for f in request.files.getlist('photo'):
            filename = secure_filename(f.filename)
            f.save(os.path.join(app.config['UPLOAD_PATH'], filename))
        return 'Upload completed.'
    return render_template('upload.html', form=form)

形成:

from flask_wtf import FlaskForm
from wtforms import SubmitField
from flask_wtf.file import FileField, FileAllowed, FileRequired

class UploadForm(FlaskForm):
    photo = FileField('Image', validators=[
        FileRequired(),
        FileAllowed(photos, 'Image only!')
    ])
    submit = SubmitField('Submit')

模板:

<form method="POST" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    {{ form.photo(multiple="multiple") }}
    {{ form.submit }}
</form>


 类似资料:
  • 问题内容: 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印内容 如果我上传多个文件,它将仅打印该集中的第一个文件: 是否可以使用Flask的内置上传处理方式接收多个文件?谢谢你的帮助! 问题答案: 你可以使用flask.request.files的方法getlist,例如:

  • 问题内容: 嗨,我对Flask很陌生,我想使用ajax调用将文件上传到服务器。如文档中所述,我将文件上传添加为以下格式: 我这样写了ajax处理程序 我不知道如何从中获取上传的文件(不是名称) 并将文件保存在文件夹中。我不太确定如何从我编写的处理程序中读取文件: 如果有人可以帮助,我将不胜感激。先感谢您 问题答案: 要回答您的问题… HTML: JavaScript: 现在,在flask的终结点视

  • 我正在尝试使用DropZone上载多个文件。但在控制器中检索文件名时出现问题。请帮我找出哪里出了错。我已经在下面发布了我的代码。 DropZone的HTML代码: 脚本文件,用于: 在控制器actionCreate()方法中: 当我在拖放框中添加图片并点击提交按钮时,拖放框中的图片显示成功结果。但是当我试着打印$模型的时候-

  • 我试图理解以下文档: Transferutility.UploadDirectory null null null

  • 但是如何为多个文件做呢? PS.在webflux中有没有另一种上传一组文件的方法?

  • 本文向大家介绍Python使用Flask框架同时上传多个文件的方法,包括了Python使用Flask框架同时上传多个文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用Flask框架同时上传多个文件的方法,分享给大家供大家参考。具体如下: 下面的演示代码带有详细的html页面和python代码 index.html代码 upload.html页面: 希望本文所述对大家