AppInventor+上传图片到阿里云+python+flask+api编写

目录

  • AppInventor端组件与代码
    • 组件设计
    • 逻辑设计
  • Python云端API搭建
    • 环境搭建
    • python代码
    • API云端启动

网上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/
这是一个简单的在线图形化编程环境,上手非常迅速,本教程跳过基础入门,直接讲核心功能搭建。

组件设计

AppInventor+上传图片到阿里云+python+flask+api编写_第1张图片
组件我比较偷懒,就只拖了一个按钮进来,当点击这个按钮的时候,就会调用照相机;相机完成拍照后就会自动上传。

逻辑设计

AppInventor+上传图片到阿里云+python+flask+api编写_第2张图片
这边的备注请仔细看一下,对于网络通信我并不精通,只能简单地解释一下,如果不专业请见谅。在本项目中,我们使用的是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
AppInventor+上传图片到阿里云+python+flask+api编写_第3张图片
这样图片就保存在阿里云上了
AppInventor+上传图片到阿里云+python+flask+api编写_第4张图片
因为用xshell操作断开后,后端程序也会自动断开,默认常开启的指令为:nohup python api.py &
终止默认常开启:
lsof -i:8081(用哪个端口输入哪个端口)
kill -9 pid(PID号输入上面指令跳出的内容)

你可能感兴趣的:(appinventor,python,flask,上传图片,云)