下面我将为你详细讲解“Python3 Flask 实现文件上传功能”的完整攻略。
1. 确定上传文件的保存路径
在 Flask 中,我们可以通过设置 app.config
来确定上传文件的保存路径。一般来说,我们建议将上传文件保存在外部的文件夹中,而不要与 Flask 应用程序的代码混淆。
下面是一个设置上传文件保存路径的代码示例:
import os
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename
app = Flask(__name__)
# 设置上传文件保存路径
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
return '''
<!doctype html>
<title>文件上传</title>
<h1>上传文件</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=上传>
</form>
'''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)
2. 设计前端页面
在 Flask 中,我们可以使用 HTML/CSS/JavaScript 来设计前端页面,从而实现用户上传文件的功能。下面是一个简单的 HTML 文件示例,它可以帮助你理解如何在 Flask 中实现文件上传功能:
<!doctype html>
<html>
<head>
<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>
3. 组织路由与视图
在 Flask 应用程序中,路由负责接收用户请求并将其发送到相应的视图函数。视图函数负责处理用户请求并生成 HTTP 响应。为了实现文件上传功能,我们需要在 Flask 应用程序中添加两个视图函数:
/upload
:这个视图函数负责接收用户上传的文件并将其保存在指定的路径中。/uploads/<filename>
:这个视图函数负责从服务器上获取已经上传的文件并返回给用户。
下面是完整的 Flask 应用程序示例:
import os
from flask import Flask, request, redirect, url_for, send_from_directory
from werkzeug.utils import secure_filename
app = Flask(__name__)
# 设置上传文件保存路径
app.config['UPLOAD_FOLDER'] = '/path/to/uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
@app.route('/')
def home():
return '''
<!doctype html>
<title>文件上传</title>
<h1>上传文件</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
'''
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file',
filename=filename))
else:
return '''
<!doctype html>
<title>文件上传</title>
<h1>上传文件</h1>
<p>不支持该文件类型</p>
'''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
if __name__ == '__main__':
app.run(debug=True)
4. 总结
到这里,我们就完成了一个简单的文件上传功能。在这个例子中,Flask 应用程序负责接收文件、保存文件、并将保存的文件返回给用户。希望这篇攻略能够对你有所帮助,谢谢!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3 flask实现文件上传功能 - Python技术站