App Inventor 2 上传文件到PHP服务端

0、前言

前段时间发现了一个HTML小游戏吃掉小鹿乃,于是就Fork项目魔改了一下,取名吃掉O泡

原项目仓库:
https://github.com/arcxingye/EatKano/

由于有很多人找我定制这个小游戏,但是这样做效率很低,因为基本上只需要复制粘贴+改点击图片按钮音效,其他的可以照抄。

因此我就准备开发类似Steam的创意工坊的软件,可以自定义以上项目,并一键生成。但是使用FTP上传文件并不安全,因此我找到了使用PHP上传文件的方法。

1、AI2源码

源码

提示:推荐使用WxBit(https://vip.wxbit.com),拖入工作区即可导入代码!

2、PHP源码

2.1、配置

PHP
1
2
3
4
5
6
7
8
9
<?php

define('FILE_UPLOAD_TOKEN','Blog_Tsinbei_Com');//上传密钥

define('FILE_UPLOAD_PATH','./upload/');//上传文件存储目录

define('FILE_UPLOAD_MAXTIME','10');//上传文件超时时间,单位:秒

define('FILE_UPLOAD_TYPE','png,jpg,jpeg,gif,bmp,webp,json,mp3');//上传文件类型,支持图片、JSON、音频

2.2、上传

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

include('config.php');
isset($_POST['fileName'])?$upload_fileName = $_POST['fileName']:exit('缺少参数');
isset($_POST['fileBase64'])?$upload_fileBase64 = $_POST['fileBase64']:exit('缺少参数');
isset($_POST['fileType'])?$upload_fileType = $_POST['fileType']:exit('缺少参数');
isset($_POST['sign'])?$upload_sign = $_POST['sign']:exit('缺少参数');
isset($_POST['ts'])?$upload_ts = $_POST['ts']:exit('缺少参数');
//校验时间戳
$upload_ts-time()<3&&time()-$upload_ts<FILE_UPLOAD_MAXTIME?0:exit('请求超时');//根据实际情况调整
//校验签名
$upload_sign == md5($upload_fileName.$upload_fileBase64.$upload_fileType.FILE_UPLOAD_TOKEN.$upload_ts)?0:exit('签名校验失败');
//检查上传文件类型
$fileTypeArray = explode(',', strtolower(FILE_UPLOAD_TYPE));
in_array($upload_fileType,$fileTypeArray)?$fileType = $upload_fileType:exit('不支持的文件类型');
//储存文件
$fileID = uniqid('upload_');
file_exists(FILE_UPLOAD_PATH)?0:mkdir(FILE_UPLOAD_PATH);
$fileName = FILE_UPLOAD_PATH.$fileID.'.'.$fileType;
$myfile = fopen($fileName, "w") or die("Unable to open file!");
fwrite($myfile, base64_decode($upload_fileBase64));
fclose($myfile);
//获得文件URL
$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ?"https://": "http://";
$url = $protocol . $_SERVER['HTTP_HOST'] . "/" . pathinfo($fileName)['dirname'] . "/" . pathinfo($fileName)['basename'];
//返回信息
$time_consuming = time()-$upload_ts;
echo "文件上传成功!链接:{$url} 耗时:{$time_consuming}秒";

3、下载

此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。

本下载服务由清北网盘提供技术支持!


鸣谢

参考文章:

Appinventor上传文件到php服务端(含源码)
https://www.amgl.work/archives/140/

App Inventor 2 上传文件到PHP服务端

https://blog.tsinbei.com/archives/529/

文章作者
Hsukqi Lee
发布于

2022-06-19

修改于

2022-11-16

许可协议

CC BY-NC-ND 4.0

评论

昵称
邮箱
网址
暂无