如何使用Flask实现文件上传和下载功能
使用Flask实现文件上传和下载功能需要以下步骤:
1. 配置Flask应用
在Flask应用中需要进行一些配置,使其能够处理文件上传和下载。首先,需要设置一个存储文件的目录,可以通过app.config['UPLOAD_FOLDER']来设置。还可以设置允许上传的文件类型,可以使用app.config['ALLOWED_EXTENSIONS']来设置。如果需要限制上传文件的大小,可以使用app.config['MAX_CONTENT_LENGTH']设置。同时,还需要在Flask应用中注册FileStorage类,用于处理文件上传和下载。
2. 实现文件上传功能
可以使用Flask提供的request对象来处理文件上传。首先,需要在前端表单中添加一个input元素,使用户能够选择文件。然后,在Flask应用的路由函数中,可以使用request.files获取上传的文件对象。通过save()方法可以将文件保存到指定的目录中。
下面是一个简单的文件上传的示例代码:
from flask import Flask, render_template, request, redirect, url_for
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = '/path/to/upload/folder'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS']
@app.route('/', 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 render_template('upload.html')
@app.route('/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
在模板文件upload.html中,需要添加一个表单,用于选择要上传的文件:
<!doctype html>
<title>Upload new File</title>
<h1>Upload new File</h1>
<form action="" method=post enctype=multipart/form-data>
<p><input type=file name=file>
<input type=submit value=Upload>
</form>
3. 实现文件下载功能
要实现文件下载功能,可以使用send_from_directory函数从指定目录中发送文件给客户端。可以将该函数作为路由函数的返回值,以提供文件下载的链接。
下面是一个简单的文件下载的示例代码:
from flask import Flask, render_template, send_from_directory
app = Flask(__name__)
app.config['DOWNLOAD_FOLDER'] = '/path/to/download/folder'
@app.route('/')
def index():
return render_template('download.html')
@app.route('/download/<filename>')
def download_file(filename):
return send_from_directory(app.config['DOWNLOAD_FOLDER'], filename)
在模板文件download.html中,可以添加下载链接,以便用户点击下载文件:
<!doctype html>
<title>Download File</title>
<h1>Download File</h1>
<ul>
<li><a href="{{ url_for('download_file', filename='file1.txt') }}">file1.txt</a></li>
<li><a href="{{ url_for('download_file', filename='file2.pdf') }}">file2.pdf</a></li>
<li><a href="{{ url_for('download_file', filename='file3.jpg') }}">file3.jpg</a></li>
</ul>
在上述示例代码中,UPLOAD_FOLDER和DOWNLOAD_FOLDER需要根据实际情况进行配置。同时,还需要在Flask应用中安装相应的依赖,例如werkzeug和os。
通过以上步骤,就可以使用Flask实现文件上传和下载功能了。用户可以通过表单选择要上传的文件,Flask应用会将文件保存到指定的目录中。另外,Flask应用还可以提供下载链接,用户可以点击链接下载指定的文件。
