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

WerkzeugHTTP模块中的文件上传和下载实践

发布时间:2023-12-26 07:23:10

Werkzeug是一个Python的Web框架库,其中包含了一个名为WerkzeugHTTP的模块,该模块提供了文件上传和下载的功能。下面我们将通过使用例子来演示如何在Werkzeug中进行文件上传和下载。

文件上传:

要在Werkzeug中实现文件上传,我们需要创建一个HTML表单,使用户可以选择要上传的文件。然后,在服务器端,我们需要编写相应的代码来处理上传文件的请求。

首先,创建一个HTML表单,如下所示:

<!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>

在Werkzeug的服务器端,我们可以使用werkzeug.utils.secure_filename函数来安全地保存上传的文件。假设我们使用Flask框架来处理请求,我们可以编写如下的代码:

from flask import Flask, request, render_template
from werkzeug.utils import secure_filename

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("upload.html")

@app.route("/upload", methods=["POST"])
def upload():
    file = request.files["file"]
    filename = secure_filename(file.filename)
    file.save(filename)
    return "文件上传成功"

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

在这个例子中,当用户点击提交按钮时,表单的数据会以POST请求的方式发送到/upload路由上。在upload函数中,我们使用request.files来获取上传的文件对象,并使用secure_filename函数来确保文件名的安全性。最后,我们使用file.save方法将文件保存到服务器上。

文件下载:

要实现文件下载功能,我们只需要提供一个链接,让用户点击该链接即可下载相应的文件。

首先,我们需要编写一个生成下载链接的HTML页面,如下所示:

<!DOCTYPE html>
<html>
  <body>
    <h1>文件下载</h1>
    <a href="/download">点击下载</a>
  </body>
</html>

然后,在服务器端,我们需要编写相应的代码来处理下载请求。

from flask import Flask, send_file

app = Flask(__name__)

@app.route("/")
def index():
    return render_template("download.html")

@app.route("/download")
def download():
    path = "path/to/your/file"
    return send_file(path, as_attachment=True)

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

在这个例子中,当用户点击下载链接时,请求会发送到/download路由上。在download函数中,我们使用send_file函数来发送文件给客户端,并通过as_attachment=True参数告诉浏览器将该文件作为附件下载。

通过上述例子,我们可以看到,在Werkzeug中实现文件上传和下载非常简单。无论是上传文件还是下载文件,都只需要几行代码就可以实现。