使用Flask
实现文件下载服务,但这个服务仅能在内网获得,如果想要在外网获得这个服务,正常情况下需要完成购置域名、申请静态IP
和域名解析等工作,在文件下载服务需求不大或者对服务稳定性要求不高的情况下,可以考虑通过内网穿透技术实现外网对内网文件下载服务的获取。
NATAPP
是一款基于ngrok
的国内高速内网映射工具,注册以后可以免费获取2
个不同协议的隧道,可用于内网映射。
1. 文件服务器
以下代码实现了一个简易的文件下载服务,在浏览器键入http://127.0.0.1:5000/download
即可开始下载test.txt
:
from flask import Flask, request, send_from_directory
app = Flask(__name__)
@app.route('/download',methods=['GET'])
def testdownload():
return send_from_directory(r"./",filename="test.txt", as_attachment=True)
if __name__ == "__main__":
app.run(host='127.0.0.1',port=5000)
2. NATAPP注册及购买(免费)隧道
进入NATAPP
主页https://natapp.cn/
,点击注册按钮完成注册。点击购买隧道页面,购买免费隧道:
隧道协议选择Web,本地端口即Flask
中配置的5000
,点击购买后会生成一条隧道信息,包含了authtoken,这个信息用于配置客户端软件:
3. 下载NATAPP客户端并配置config.ini
在NATAPP
主页下载客户端软件natapp.exe
,同时在软件同级目录创建配置文件config.ini
,配置文件的内容如下,需要将步骤2中的authtoken内容粘贴至配置文件内:
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken= #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
4. 运行服务
依次启动Flask
服务和NATAPP
服务,NATAPP
服务启动后命令行窗口中的Forwarding
即外网访问地址,注意,每次启动NATAPP
服务时该地址都会发生变化。
服务启动后,打开手机的蜂窝网络,键入Forwarding
地址http://fyy9zi.natappfree.cc/download
即可以开始下载文件。