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中实现文件上传和下载非常简单。无论是上传文件还是下载文件,都只需要几行代码就可以实现。
