web服务搭建

本文介绍了如何使用Python快速搭建Web服务器,实现手机上传图片到云服务器,通过Python脚本处理后再下载回手机的功能。通过X里云的低成本服务器,结合Python的http.server和bottle库,创建上传和下载页面,实现文件交互。同时,文中提到了将脚本转化为持续运行的Web服务的方法,并给出了相关资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

需求:

 

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

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

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

 

方案:

 

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

 

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

 

1. 使用Python3命令开启Web服务

 

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

 
  1. # 此为Python3脚本,在cmd中运行此命令。(Python2脚本与此不同请自行百度)

  2. # 9900 是端口号,可随意设置

  3. python -m http.server 9900

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

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

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

 

2. 安装bottle库

 

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

Flask:轻量自由;

Django:大而全;

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

 

使用pip3安装bottle:

pip3 install bottle

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

 

3. 使用bottle实现上传下载页面

 

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

【这个下面这个脚本一定一定 不要起名 bottle.py,否则会遮盖bottle库文件,让python误以为这个脚本就是bottle库文件,导致出现import route报错】

 
  1. #Python3脚本,不适用于Python2

  2. #!/usr/bin/envpython

  3. #coding=utf-8

  4. from bottle import route,run,template,request,static_file

  5. import os

  6. import time

  7.  
  8. # 此处需改为你的目录地址

  9. img_path='/home/unixq/testHttpServer/img' #定义上传文件的保存路径

  10.  
  11. # 此处可扩充为完整HTML

  12. uploadPage='''

  13. <form action="upload" method="POST" enctype="multipart/form-data">

  14. <input type="file" name="data" />

  15. <input type="submit" value="上传" />

  16. </form>

  17. '''

  18.  
  19. @route('/upload')

  20. def upload():

  21. return uploadPage

  22.  
  23. @route('/upload',method='POST')

  24. def do_upload():

  25. uploadfile=request.files.get('data') #获取上传的文件

  26. uploadfile.save(img_path,overwrite=True) #overwrite参数是指覆盖同名文件

  27. os.system('python3 imgProcess.py') # 执行服务器本地Python脚本

  28. time.sleep(3) # 等待3秒,待本地脚本执行完毕

  29. return u"转换成功,请点击<a href='/download/output.jpg'>下载文件</a>"

  30.  
  31. @route('/download/<filename:path>')

  32. def download(filename):

  33. return static_file(filename,root=img_path,download=filename)

  34.  
  35.  
  36. run(host='0.0.0.0',port=8899,debug=True)

上云效果如下:(截图由 Snapaste 软件制作)

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

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

$ nohup python3 upload.py &

查看所有在执行的任务【注意:此命令仅在当前终端有效】:

$ jobs

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

 
  1. $ fg %3

  2. $ bg %2

注意:jobs命令仅在当前终端有效。过几日,我们再进入云服务器,jobs是没有结果的。此时需要使用 ps -ef | grep python3来查找还在后台运行的进程。如果需要关掉,使用命令“ kill 进程号”。

 

4. 转为正式Web服务持续运行

以上命令启动的服务,很容易挂掉,不知道为什么。如果要像网站一样7*24不间断提供访问,还是需要来一套正规的服务器软件。

推荐:Nginx + uwsgi + bottle,即可像 Apache + Tomcat 或者 Apache + PHP 一样长期提供Web服务。

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值