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.服務正常運行中,但文件被其他用戶刪除了

在這裏插入圖片描述

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