前几天在服务器文件传输文件的时候,遇到了一些恶心的事情… 很多时候scp和rsync是没有打通免密钥的,每次输入我那密码,很是费劲。 我相信大家也会经常用SimpleHTTPServer来下载文件,他性能不好,接口是堵塞的,同时只能一个人下来。 另外有时候,某个节点他没有外网,他不能用SimpleHTTPServer文件服务,只能是推送? 这时候怎么办? 当然办法有很多,我这边的方法比较简单,用我的linode日本节点做了一个文件服务器,可下载和上传,是nginx lua的配合。 但毕竟每次都经过日本的节点实在是麻烦,在机房内部搞的话,我没有root权限,所以配置不了….
然后我就用tornado写了一个文件服务器,tornado是个异步的网络框架,他在做文件服务器的时候,性能要比SimpleHTTPServer强点,另外我还适配了一个简单的html页面,可以在页面上直接上传文件和下载。
关于python实现文件服务,解决服务器之间的上传下载传输问题,原文地址 http://xiaorui.cc/?p=1844
这fileporter的代码已经放在github上了 ,同样在pypi源也推送了。只是在pip install fileporter的时候,遇到了些问题。 以前在pypi也提交过不少的模块,但基本是关于纯python的代码,但这次会含有html的文件,所以在打包和解压的时候,遇到了些问题。
地址如下:
https://github.com/rfyiamcool/fileporter https://pypi.python.org/pypi/fileporter/1.7
关于安装
git clone git@github.com:rfyiamcool/fileporter.git cd fileporter;python setup.py install 或者. pip install fileporter运行的方法
[ruifengyun@devops fileporter ]python fileporter.py 9090 INFO:root:Serving HTTP on 0.0.0.0 port 9090 ... and ,same as SimpleHTTPServer method [ruifengyun@devops ~ ] python -m fileporter.server 8080 INFO:root:Serving HTTP on 0.0.0.0 port 8080 ...
你可以打开浏览器去下载上传,也可以直接用curl来进行上传,如果是python可以用requests来实现文件上传。
curl -F "file=@app.py" http://127.0.0.1:9090/下载的方法
curl -O http://127.0.0.1:9090/app.py下面是浏览器的截图…
关于tornado在做文件服务器下载上传的性能,我还没有做过测试。 但是直接不会很强,以前在做tornado技术方案的时候,都会用nginx location做文件下载。
现在还差一个客户端,支持断点续传和多线程下载的。 python的多线程下载算是好实现,通过http的206获取文件大小,然后截取下载,最后合并罢了。