适用的场景
- 1.公司有从第三方下载文件并解析的业务,你需要测试各种类型的文件\不同格式\不同大小\有缺失等场景,遗憾的是你无法控制第三方帮你制作这些文件,所以你可以自己制作这些文件并搭建一个下载服务器
- 2.你想用微信发一个文件给同事,可是文件超过100M(微信传输文件不能超过100兆),QQ可以发但你不用QQ,此时你本地搭建一个下载服务器即可(确保你们在同一个局域网,如: 连接同一个WiFi)
整理思路
- 一个目标文件,如test.zip
- 很方便启动/停止该服务,并且有基本的错误提示
- 一行命令解决!,比如
./download_server.py test.zip
放码过来
1. 创建download_server.py文件:
在CentOS 7.4下编写和自测,其他环境运行时请注意python需要装有flask库
#!/usr/bin/env python
#coding=utf-8
import sys
import os
from flask import Flask, render_template, send_from_directory, make_response
app = Flask(__name__)
file_name = sys.argv[1]
@app.route('/', methods=['GET'])
def index():
down_url = "http://127.0.0.1:5000/{}".format(file_name)
return '<html><body><h1>Download Server</h1><a href="{0}">{0}</a></body></html>'.format(down_url)
@app.route('/'+file_name, methods=['GET'])
def down():
exec_path = os.getcwd()
file_path = '/'.join([exec_path,file_name])
if os.path.exists(file_path):
return make_response(send_from_directory('./', file_name, as_attachment=True))
else:
return '{}目录下没有找到名称为{}的文件'.format(exec_path,file_name)
if __name__ == "__main__":
app.run(host='0.0.0.0',port='5000', debug=False)
2. 本地运行脚本,执行命令./download_server.py test.zip
[root@TestSystem ~]# ./download_server.py test.zip
* Serving Flask app "download_server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
3. 打开网站,链接是http://127.0.0.1:5000
(如果其他人需要访问,请替换为你的内网ip,端口不动)
4. 下载测试,点击文件下载的URL
异常测试:
1. 关闭服务器, 尝试用一个不存在的文件启动
# 关闭服务器:
# 快捷键 Ctrl + C
# 启动:
[root@TestSystem ~]# ./download_server.py aaa.zip
当前目录下没有找到名称为aaa.zip的文件