python 写一个基于flask的下载服务器

适用的场景

  • 1.公司有从第三方下载文件并解析的业务,你需要测试各种类型的文件\不同格式\不同大小\有缺失等场景,遗憾的是你无法控制第三方帮你制作这些文件,所以你可以自己制作这些文件并搭建一个下载服务器
  • 2.你想用微信发一个文件给同事,可是文件超过100M(微信传输文件不能超过100兆),QQ可以发但你不用QQ,此时你本地搭建一个下载服务器即可(确保你们在同一个局域网,如: 连接同一个WiFi)

整理思路

  1. 一个目标文件,如test.zip
  2. 很方便启动/停止该服务,并且有基本的错误提示
  3. 一行命令解决!,比如./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的文件
2.服务正常运行中,但文件被其他用户删除了

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章