欢迎访问宙启技术站
智能推送

PythonFlask-WTF文件上传和下载功能实现

发布时间:2023-12-11 06:14:44

PythonFlask是一个用来开发Web应用程序的轻量级框架,而WTForms是一个用来处理Web表单的Python库。在Flask应用程序中使用WTForms可以帮助我们更方便地处理表单数据。

在Flask应用程序中实现文件上传和下载功能,可以帮助我们更好地管理和展示文件,并且提供给用户方便的上传和下载操作。下面我们将介绍如何在PythonFlask应用程序中实现文件上传和下载功能,并给出相应的使用例子。

一、文件上传功能实现

要实现文件上传功能,我们需要在Flask应用程序中设置相应的路由来处理上传请求,并在HTML表单中提供上传文件的输入字段。然后在路由处理函数中,使用Flask中提供的request.files方法来处理上传的文件。

首先,我们需要在Flask应用程序中设置一个路由来处理上传请求,如下所示:

@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['file']
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
        return '文件上传成功!'
    return render_template('upload.html')

上述代码中,'upload'是路由的URL地址。在GET请求中,我们渲染一个upload.html模板,用于展示上传文件的表单。在POST请求中,我们处理上传的文件,将其保存到服务器的指定目录下。

接下来,我们需要在HTML模板中提供一个文件上传的输入字段,如下所示:

<!doctype html>
<title>文件上传</title>
<h1>文件上传</h1>
<form action="/upload" method=post enctype=multipart/form-data>
  <p><input type=file name=file>
     <input type=submit value=上传>
</form>

上述代码中,<input type=file>指定了文件上传的输入字段,enctype=multipart/form-data表示表单数据以多部分数据的形式进行提交。

然后,我们可以编写一个main函数来运行我们的Flask应用程序,如下所示:

if __name__ == '__main__':
    app.run()

现在,我们就可以运行我们的Flask应用程序,并进行文件上传了。

使用例子:

from flask import Flask, render_template, request
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'


@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['file']
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
        return '文件上传成功!'
    return render_template('upload.html')


if __name__ == '__main__':
    app.run()

我们运行上述代码后,在浏览器输入http://localhost:5000/upload即可打开上传文件的页面,选择一个文件上传即可。文件将会保存在uploads文件夹中。

二、文件下载功能实现

要实现文件下载功能,我们需要在Flask应用程序中设置一个路由来处理下载请求,并在路由处理函数中返回文件给浏览器。我们可以使用Flask提供的send_file方法来实现文件下载。

首先,我们需要在Flask应用程序中设置一个路由来处理下载请求,如下所示:

@app.route('/download', methods=['GET'])
def download_file():
    filename = 'uploads/example.png'
    return send_file(filename, as_attachment=True)

上述代码中,'download'是路由的URL地址。在路由处理函数中,我们使用send_file方法来返回指定的文件给浏览器。as_attachment=True表示将文件作为附件进行下载。

接下来,我们可以编写一个main函数来运行我们的Flask应用程序,如下所示:

if __name__ == '__main__':
    app.run()

现在,我们就可以运行我们的Flask应用程序,并进行文件下载了。

使用例子:

from flask import Flask, render_template, send_file

app = Flask(__name__)


@app.route('/download', methods=['GET'])
def download_file():
    filename = 'uploads/example.png'
    return send_file(filename, as_attachment=True)


if __name__ == '__main__':
    app.run()

我们运行上述代码后,在浏览器输入http://localhost:5000/download即可下载指定的文件。

通过上述代码示例,我们可以了解到如何在PythonFlask应用程序中实现文件上传和下载功能。使用WTForms可以帮助我们更方便地处理表单数据。这些功能对于构建Web应用程序非常有用,可以让我们更好地管理和展示文件,并且提供给用户方便的上传和下载操作。