【Python】吹爆Python!1行代码搭建Web服务器30行代码实现服务器的文件上传下载

【全文仅适用 Python3 】

不得不说,Python确实牛逼,不服不行。

先说需求,没有需求驱动,都是没有动力的。

需求:

手机每日下载图片,然后需经过本人编写的Python脚本处理一遍,再返回到手机上。

个人电脑不能保证时刻开机在线,自己也不可能一直在电脑旁边,故欲将脚本放置云服务器执行。因此,该云服务器应有Web界面,供我上传图片和下载处理后的图片。

简单说,手机上传图片,服务器处理,手机下载结果图片。

方案:

基于成本考虑,超过RMB 100元的都不考虑。看来看去,就A里和X讯比较靠谱。于是使用新手特权购买X里云服务器一台,配置较低:1核2G1M40G, CentOS7,但是价格非常之便宜,一年还不到100。这里是优惠链接

这么低的配置,Java系就不考虑了。刚好图像处理脚本是Python,何不直接用Python搭建HTTP Server。搜索之,果不期然,Python没有让我失望。

1. 神奇的Python

只用下面一句命令,即可搭建HTTP Server:

# 此为Python3脚本,在cmd中运行此命令。(Python2脚本与此不同请自行百度)
# 9900 是端口号,可随意设置
python -m http.server 9900

然后你就可以在浏览器中输入:http://localhost:9900 ,就能看到一个空白页面,这就说明HTTP Server已经运行了。

如果执行该命令的目录内有文件,你输入 http://localhost:9900,会看到该目录下的所有文件列表,很像一个FTP服务器。

对,没错,只需这一句话,你的当前文件夹就变成了FTP服务器根目录,局域网内都可以随意下载文件。简直是,内网搭建FTP服务器(发布文件)之利器!

2. 上传与下载

很可惜,这一行命令只能下载,没有上传界面。于是,我又是一番搜索,得知,成型的Python Web服务器有

Flask:轻量自由;

Django:大而全;

在我看来都复杂了,我不想因运行一个脚本而搭建个完整的Web服务器。最后,看中了只有一个文件的Python Web服务器 Bottle 。一个文件,这才是小而美。

使用pip3安装bottle:

pip3 install bottle

既然用到 bottle,就去看了几篇帖子,该作者写的Bottle系列文章都挺好,分享之。

参考该作者文章,我删繁就简,简化成了1个Python文件。但是能实现:上传界面,下载界面,调用服务器python脚本三大核心功能,最终实现手机即能下载到图片处理结果。

#Python3脚本,不适用于Python2
#!/usr/bin/envpython
#coding=utf-8
from bottle import route,run,template,request,static_file
import os
import time

# 此处需改为你的目录地址
img_path='/home/unixq/testHttpServer/img'	#定义上传文件的保存路径

# 此处可扩充为完整HTML
uploadPage='''
	<form action="upload" method="POST" enctype="multipart/form-data">
		<input type="file" name="data" />
    	<input type="submit" value="上传" />
	</form>
'''

@route('/upload')
def upload():
	return uploadPage

@route('/upload',method='POST')
def do_upload():
	uploadfile=request.files.get('data')		#获取上传的文件
	uploadfile.save(img_path,overwrite=True) 	#overwrite参数是指覆盖同名文件
	os.system('python3 imgProcess.py')			# 执行服务器本地Python脚本
	time.sleep(3)								# 等待3秒,待本地脚本执行完毕
	return u"转换成功,请点击<a href='/download/output.jpg'>下载文件</a>"

@route('/download/<filename:path>')
def download(filename):
	return static_file(filename,root=img_path,download=filename)


run(host='0.0.0.0',port=8899,debug=True)

上云效果如下:(截图由 Snapaste 软件制作,大爱此软件,写博客必备)

最后,如果在云服务器上执行时,使用 nohug 指令,可以使本脚本在我们关掉Shell的时候,依然在后台执行.

其中 & 命令是使脚本在后台执行。

$ nohup python3 upload.py &

查看所有在执行的任务:

$ jobs

把后台任务调整到前台,使用 fg %任务号;反之,使用 bg %任务号:

$ fg %3
$ bg %2

参考资料:https://www.aliyun.com/minisite/goods?userCode=f3xmzovo

发布了62 篇原创文章 · 获赞 46 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qilei2010/article/details/104602796
今日推荐