main.py
import urllib
import os
import flask
app = flask.Flask("web")
@app.route("/", methods=["GET", "POST"])
def index():
msg = ""
files = ""
if flask.request.method=="POST":
# 读取上传的文件
# 文件的获取,文件不能使用flask.request.values.get()
file = flask.request.files["myFile"]
if file:
# 读取文件
data = file.read()
# 保存文件
fn = "UploadFiles\\" + file.filename
fobj = open(fn, "wb")
fobj.write(data)
fobj.close()
msg = "成功上传" + file.filename
else:
msg = "请选择上传文件"
else:
fileName = flask.request.values.get("fileName", "")
if fileName != "":
return download(fileName)
files = os.listdir("UploadFiles")
return flask.render_template("upload.html", msg=msg, files=files)
def download(fileName):
# 读取文件数据
fn = "UploadFiles\\" + fileName
# 如果要下载中文文件,首先将文件名进行如下处理
# fileName = "文件名"
# # 引入编码器
# import urllib
# fileName = urllib.parse.quote(fileName)
# # 还需设置相应报头
f = open(fn, "rb")
data = f.read()
f.close()
# 创建一个HttpResponse对象
response = flask.make_response(data)
# 设置响应的报头
fileName = urllib.parse.quote(fileName)
response.headers["Content-Disposition"] = "attachment;filename=" + fileName
response.headers["ContentType"] = "application/octet-stream"
response.headers["Encoding"] = "utf8"
return response
app.debug=True
if __name__ == "__main__":
app.run()
upload.html
<h1>文件上传</h1>
<form name="frm" action="" method="post" enctype="multipart/form-data">
<input type="file" name="myFile">
<input type="submit" value="上传">
</form>
<div>{{msg}}</div>
<h1>文件下载</h1>
<ul>
{% for f in files %}
<li><a href="?fileName={{f}}">{{f}}</a></li>
{% endfor %}
</ul>
可以将UploadFiles文件中的文件下载到电脑中,也可以将电脑中的文件上传到UploadFiles文件中
显示界面如图所示:
蓝色字体是可以下载的文件,如果有文件上传到UploadFiles文件中,蓝色字体也会相应的添加上上传的文件