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

组件设计

APP组件设计
组件我比较偷懒,就只拖了一个按钮进来,当点击这个按钮的时候,就会调用照相机;相机完成拍照后就会自动上传。

逻辑设计

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

App Inventor中,可以使用Clock组件来实现倒计时功能。具体步骤如下: 1.在Designer界面中,将Clock组件拖入画布中。 2.在Blocks界面中,使用Clock组件的定时器事件来实现倒计时功能。例如,可以使用Clock定时器事件中的Interval属性来设置倒计时的时间间隔,使用Clock定时器事件中的Timer属性来设置倒计时的总时间。在定时器事件中,可以使用计数器变量来记录剩余时间,并在每次定时器事件触发时将计数器减1,直到计数器为0时,倒计时结束。 3.在倒计时结束时,可以使用Notifier组件来显示倒计时结束的提示信息,并跳转到最终成绩页面。 4.在最终成绩页面中,可以使用Button组件来实现重新开始和退出功能。 以下是一个简单的App Inventor倒计时示例: 1.在Designer界面中,将Clock、Label和Button组件拖入画布中。 2.设置Label组件的Text属性为倒计时的初始时间,例如30秒。 3.在Blocks界面中,使用Clock组件的定时器事件来实现倒计时功能。具体代码如下: ```blocks // 初始化计数器变量 counter = 30 // 设置Clock组件的Interval属性为1000毫秒 Clock1.Interval = 1000 // 设置Clock组件的Timer属性为30秒 Clock1.Timer = 30 // 定义Clock组件的定时器事件 Clock1.Timer => (event) { // 将计数器减1 counter = counter - 1 // 更新Label组件的Text属性为剩余时间 Label1.Text = counter // 判断计数器是否为0,如果为0则倒计时结束 if counter = 0 then // 显示倒计时结束的提示信息 Notifier1.ShowAlert("Time's up!") // 跳转到最终成绩页面 // ... end if } ``` 4.在最终成绩页面中,可以使用Button组件来实现重新开始和退出功能。具体代码如下: ```blocks // 定义重新开始按钮的点击事件 Button1.Click => (event) { // 重新开始游戏 // ... } // 定义退出按钮的点击事件 Button2.Click => (event) { // 退出游戏 // ... } ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值