原创文章, 禁止转载
静态文件服务器能够将本地的一个路径映射为一个地址, 供其他人访问. 我们每天访问的各类网站, 背后都有大量的静态文件服务器做支撑. 不过大多数静态文件服务器的搭建都不够简单, 在不重要的情景下使用传统静态文件服务器, 不免小题大做. 这里我们讲解一个最简单的搭建静态文件服务器的方式, 一行Python搞定!
基础篇
如果你的电脑上安装有Python, 那么在终端中运行如下命令, 即可搭建映射当前目录的静态文件服务器:
python -m SimpleHTTPServer
启动的静态文件服务器, 默认监听8000端口, 终端输出如下
如果您的当前文件夹中有一个文件为xxxx.apk, 那么启动服务器后, 您就可以在浏览器中输入 http://127.0.0.1:8000/xxxx.apk来下载这个文件.
只输入http://127.0.0.1:8000/ 可以查看整个目录.
如果你需要更改监听的端口, 则在命令的最后指明需要监听的端口号
python -m SimpleHTTPServer 9000
进阶篇
这个Python搭建的静态文件服务器实在太方便了. 尤其是在内网传文件的时候, 自己搭这样一个静态文件服务器, 可以充分利用内网的带宽, 50MB/s不是梦! 但是这个服务器由于太简易, 不免存在一些缺陷. 最明显的就是它不支持并发, 所以同时只能有一个同事从你的机器上下载文件, 不能群发! 为了克服这个弊病, 我写了一个Python模块, 让这个静态文件服务器支持了并发, 代码如下:
import socket
import SocketServer
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
class ForkingHTTPServer(SocketServer.ForkingTCPServer):
allow_reuse_address = 1
def server_bind(self):
"""Override server_bind to store the server name."""
SocketServer.TCPServer.server_bind(self)
host, port = self.socket.getsockname()[:2]
self.server_name = socket.getfqdn(host)
self.server_port = port
def test(HandlerClass=SimpleHTTPRequestHandler,
ServerClass=ForkingHTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)
if __name__ == '__main__':
test()
将上述代码保存为文件ForkStaticServer.py, 放到Python标准库的目录下(在我的电脑上是/usr/lib/python2.7/ForkStaticServer.py), 以后用下面的命令代替前面所讲的命令, 这样搭建出来的静态文件服务器就是支持并发的!
python -m ForkStaticServer 9000