【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

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