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

Flask中使用Flask-WTF的FileField()实现文件上传和重命名功能

发布时间:2024-01-17 12:07:57

在Flask中使用Flask-WTF的FileField()实现文件上传和重命名功能非常简单。首先,我们需要安装Flask-WTF库,可以使用pip命令进行安装:

pip install flask-wtf

接下来,在Flask应用程序中引入相关模块和类:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import FileField
from werkzeug.utils import secure_filename

然后,创建一个FlaskForm的子类,并添加一个FileField字段用于文件上传:

class UploadForm(FlaskForm):
    file = FileField()

接着,我们需要在Flask应用程序中配置一些必要的参数,以便支持文件上传和保存:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['UPLOAD_FOLDER'] = '/path/to/save/uploads'
app.config['ALLOWED_EXTENSIONS'] = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

在上述配置中,我们需要提供一个密钥来保护表单数据(SECRET_KEY),一个上传文件夹路径(UPLOAD_FOLDER),以及允许上传的文件类型(ALLOWED_EXTENSIONS)。

接下来,我们需要编写一个视图函数来处理文件上传和重命名的逻辑:

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    form = UploadForm()
    if request.method == 'POST':
        file = form.file.data
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return 'File uploaded successfully!'
    return render_template('upload.html', form=form)

在上述代码中,我们首先创建一个UploadForm实例,然后判断请求的方法是否为POST。如果是POST请求,我们首先获取上传的文件对象,然后调用allowed_file()函数来验证文件类型是否允许上传。如果验证通过,我们使用secure_filename()函数来对文件名进行安全处理,然后将文件保存到指定的上传文件夹中。

最后,我们可以在模板文件中添加一个简单的HTML表单,以实现文件上传的功能:

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <h1>File Upload</h1>
    <form method="POST" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        {{ form.file.label }} {{ form.file }}
        <br>
        <input type="submit" value="Upload">
    </form>
</body>
</html>

通过以上步骤,我们就可以在Flask中使用Flask-WTF的FileField()实现文件上传和重命名的功能了。请注意,在实际应用中,我们还需要加入更多的文件验证、错误处理和安全措施来保护应用的安全性。