在现代Web应用中,文件上传功能是一个常见的需求。Flask作为一个轻量级的Python Web框架,提供了简单易用的接口来实现文件上传功能。在本文中,我们将创建一个基本的Flask应用,来演示如何实现文件上传。
环境准备
首先,确保你已安装Flask。如果还没有安装,可以通过以下命令安装:
pip install Flask
创建Flask应用
接下来,我们来创建一个简单的Flask应用。以下是文件结构的示例:
/flask_file_upload
/uploads
app.py
templates/
upload.html
在这个结构中,uploads
文件夹用于存放上传的文件,app.py
是Flask应用的主文件,templates/upload.html
是用于文件上传的HTML模板。
代码实现
1. 主文件 app.py
以下是app.py
的代码,它实现了文件上传功能:
from flask import Flask, request, render_template, redirect, url_for
import os
app = Flask(__name__)
# 设置上传文件的保存路径
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
# 仅允许上传的文件扩展名
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
# 检查文件扩展名
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/')
def index():
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload_file():
# 检查是否有文件上传
if 'file' not in request.files:
return redirect(request.url)
file = request.files['file']
# 如果用户没有选择文件,浏览器也会提交一个空的文件名
if file.filename == '':
return redirect(request.url)
# 检查文件扩展名
if file and allowed_file(file.filename):
filename = file.filename
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return '文件上传成功:{}'.format(filename)
return '不支持的文件类型!'
if __name__ == '__main__':
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
app.run(debug=True)
2. HTML模板 templates/upload.html
接下来我们来编写上传文件的HTML模板。以下是upload.html
的代码:
<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>文件上传</title>
</head>
<body>
<h1>上传文件</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
运行应用
在终端中,导航到应用目录并运行app.py
:
python app.py
打开浏览器,访问http://127.0.0.1:5000/
,你将看到一个文件上传的界面。选择一个文件后点击“上传”按钮,成功上传后,将会显示上传的文件名。
总结
在本文中,我们创建了一个简单的Flask文件上传应用。这个应用支持基本的文件上传功能,并对文件类型进行了简单的验证。在实际应用中,你可能还需要增加更多的功能,如文件大小限制、用户身份验证、上传文件名的处理、用户友好的错误提示等。希望通过本示例,你能更加熟悉Flask的文件处理功能,能够在未来的项目中加以应用。