网上AppInventor与阿里云后端交互的实例比较少,所以这篇文章主要描述了使用AppInventor平台搭建一个拍照上传到云端的场景,使用Web客户端组件,将图片PUT到阿里云后端,并基于flask框架,用一段非常简单的python脚本实现上传图片的保存。
本教程的AppInventor所用服务器是http://app.gzjkw.net/
云是购买的阿里云(其他云应该也可以),linux系统,自带python2.7环境,所用的主要库为flask,以及flask_restful
本教程比较适合稍微懂些AppInventor开发平台的人士(入门很快),以及需要快速搭建APP实现图片保存在云端以待处理(图像识别等)的应用场景。
AppInventor端组件与代码
本教程的AppInventor所用服务器是http://app.gzjkw.net/
这是一个简单的在线图形化编程环境,上手非常迅速,本教程跳过基础入门,直接讲核心功能搭建。
组件设计
组件我比较偷懒,就只拖了一个按钮进来,当点击这个按钮的时候,就会调用照相机;相机完成拍照后就会自动上传。
逻辑设计
这边的备注请仔细看一下,对于网络通信我并不精通,只能简单地解释一下,如果不专业请见谅。在本项目中,我们使用的是HTTP通信协议。AppInventor里的Web客户端组件提供了许多HTTP方法的接口,因为上传的是图片所以我采用了PUT方法(方法内容各位可以自行百度)。
url网址的设置为“http://***.***.***.***:端口号/路径”,前面的星号为你自己购得的阿里云ip地址,端口号在python程序中自己设置,路径也在后面的程序中进行设置。这里的通信方法主要是socket通信连接,如果只为实现功能可以不用理解具体原理。
Python云端API搭建
环境搭建
云:我购买是阿里云学生版轻量应用服务器,其他云平台应该都可以。
镜像信息:Centos7.3
python版本:2.7.5
python库:Flask (1.0.3)、Flask-RESTful (0.3.7)
阿里云操作软件:Xshell,Xftp
本教程相当于在阿里云上开了一个简单的API,没有涉及到后端程序的编写。如果需要实现图片的一些额外操作(比如保存上来的图片进行图像识别等),可以把后端代码import进来并加以调用。
大家新买的云服务器,记得把安全组设置为所有端口都能用。有些服务器会默认只开两个端口,如果没设置的话你的APP消息传过去会被防火墙挡住
python代码
from flask_restful import Api, Resource
from flask import Flask, request
app = Flask(__name__)
api = Api(app)
# 这边的类名是自己定义的
class receive_pic(Resource):
def put(self):
#接收二进制流保存为图片
img = request.get_data()
with open("test.png", "wb") as f:
f.write(img)
return 0
# 后面的路径可以自己定义
api.add_resource(receive_pic,'/test')
if __name__ == '__main__':
app_port = 8081
app.run(host="0.0.0.0", port=app_port, debug=True)
API云端启动
需要先把代码存放在阿里云上。然后通过以下指令进行操作,开启API
这样图片就保存在阿里云上了
因为用xshell操作断开后,后端程序也会自动断开,默认常开启的指令为:nohup python api.py &
终止默认常开启:
lsof -i:8081(用哪个端口输入哪个端口)
kill -9 pid(PID号输入上面指令跳出的内容)