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

Flask框架中的文件上传和下载功能详解

发布时间:2023-12-26 17:15:05

文件上传和下载是Web应用开发中常见的功能之一。Flask框架提供了方便的方式来实现文件上传和下载功能。在本文中,我将详细介绍Flask中的文件上传和下载功能,并提供使用例子。

1. 文件上传

Flask框架提供了FileStorage对象来处理文件上传。要使用文件上传功能,首先需要在HTML表单中设置一个文件上传字段,如下所示:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>

在Flask应用中,可以使用request.files来获取上传的文件,然后通过save()方法将文件保存到服务器上的指定位置。下面是一个简单的文件上传的处理过程的示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file:
            file.save('path/to/save/file')  # 保存文件
            return 'File saved successfully.'
    return '''
    <form method="POST" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>
    '''

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

在上述示例中,request.files返回一个字典对象,其中键是文件上传字段的名称,值是FileStorage对象。要保存文件,可以使用save()方法并传入文件保存的路径。在保存文件之后,可以返回一个成功的提示信息。

2. 文件下载

文件下载功能是指在Web应用中提供一个链接,供用户点击并下载服务器上的文件。在Flask框架中,可以通过使用send_from_directory函数来实现文件下载。下面是一个简单的文件下载的处理过程的示例代码:

import os
from flask import Flask, send_from_directory

app = Flask(__name__)

@app.route('/')
def download_file():
    filename = 'path/to/file'
    if os.path.isfile(filename):
        return send_from_directory(os.path.dirname(filename), os.path.basename(filename), as_attachment=True)
    return 'File not found.'

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

在上述示例中,send_from_directory函数接收三个参数:文件所在的目录路径、文件名和as_attachment参数。as_attachment=True表示将文件作为附件下载,而不是直接在浏览器中打开。

在实际应用中,可以将文件名和目录路径作为URL的一部分,这样可以实现动态生成下载链接。例如:

@app.route('/download/<filename>')
def download_file(filename):
    filepath = 'path/to/files/' + filename
    if os.path.isfile(filepath):
        return send_from_directory(os.path.dirname(filepath), os.path.basename(filepath), as_attachment=True)
    return 'File not found.'

在这种方式下,访问/download/<filename>的URL将会下载对应的文件。

综上所述,Flask框架提供了灵活、简单的文件上传和下载功能。通过使用request.files对象来处理文件上传,使用send_from_directory函数来实现文件下载,可以轻松地实现文件的上传和下载功能。这些功能为Web应用开发提供了很大的便利性。