如何用Baas快速在腾讯云上开发小程序之系列3 :实现腾讯云COS API调用

一、实验简介

本实验通过调用腾讯云对象存储(COS)接口,实现将图片上传到指定的 Bucket 功能;同时封装图片上传接口,用于上传商品图片。

二、实验目标

  1. 掌握 RESTFul API 接口调用和调试方法
  2. 掌握 RESTFul API 封装方法

三、实验步骤

3.1 添加云应用

第一步: clone xqcloud 项目

1. cd <your project path>
2. git clone https://git.oschina.net/xpmjs/xqcloud.git xqcloud

第二步:修改远程仓库地址,提交到远程仓库

1. git remote remove origin
2. git remote add origin ssh://git@dev.appcook.cn:2222/source/xqcloud.git
3. git push origin master

3.2 调用 COS API,实现文件上传功能

第一步:编写 Cos Model vi xqcloud/model/Cos.php

1. <?php
2. use \Tuanduimao\Mem as Mem;
3. use \Tuanduimao\Excp as Excp;
4. use \Tuanduimao\Err as Err;
5. use \Tuanduimao\Conf as Conf;
6. use \Tuanduimao\Model as Model;
7. use \Tuanduimao\Utils as Utils;
8. use \Tuanduimao\Loader\App as App;
9. /**
10. * cos对象存储11. */
12. class CosModel {
13. function __construct( $opt=[] ) {
14. $this->appid = isset($opt['appid']) ? $opt['appid'] : "";
15. $this->bucket = isset($opt['bucket']) ? $opt['bucket'] : "";
16. $this->SecretID = isset($opt['SecretID']) ? $opt['SecretID'] : "";
17. $this->SecretKey = isset($opt['SecretKey']) ? $opt['SecretKey'] : "";
18. }
19. /**
20. * 签名
21. * @param array $opt [description]
22. * @return [type] [description]
23. */
24. function sign( $opt=[] ) {
25. $randstr= $this->generateId(10);
26. $t = isset($opt['e']) ? time()+86400 : 0;
27. $a = isset($opt['appid']) ? $opt['appid'] : $this->appid;
28. $b = isset($opt['bucket']) ? $opt['bucket'] : $this->bucket;
29. $k = isset($opt['SecretID']) ? $opt['SecretID'] : $this->SecretID;
30. $e = isset($opt['e']) ? $opt['e'] : time()+3600;
31. $SecretKey = isset($opt['SecretKey']) ? $opt['SecretKey'] : $this->SecretKey;
32. $s = [
33. "a" => $a,
34. "b" => $b,
35. "k" => $k,
36. "e" => $e,
37. "t" => time(),
38. "r" => $randstr,
39. "f" =>$opt['file'],
40. ];
41. // 拼接字符串
42. $orignal = "a={$s['a']}&k={$s['k']}&e={$s['e']}&t={$s['t']}&r={$s['r']}&f={$s['f']}&b={$s['b']}";
43. $signTmp = hash_hmac( 'SHA1', $orignal, $SecretKey , true );
44. $sign = base64_encode($signTmp.$orignal);
45. return $sign;
46. }
47.
48. /**
49. * 文件转.字符串
50. * @param [type] $imageUrl [description]
51. * @param array $opt [description]
52. * @return [type] [description]
53. */
54. function uploadByUrl( $imageUrl, $opt=[] ) {
55. $imageData = file_get_contents( $imageUrl );
56. return $this->upload( $imageData, $opt );
57. }
58.
59. /**
60. * 文件上传61. * @param [type] $imageData [description]
62. * @param array $opt [description]
63. * @return [type] [description]S
64. */
65. function upload( $imageData, $opt=[] ){
66. // 生成随机数

第二步: 编写测试用控制器 vi xqcloud/controller/Cos.php

1. <?php
2. use \Tuanduimao\Loader\App as App;
3. use \Tuanduimao\Utils as Utils;
4. use \Tuanduimao\Tuan as Tuan;
5. use \Tuanduimao\Excp as Excp;
6. use \Tuanduimao\Conf as Conf;
7.
8. class CosController extends \Tuanduimao\Loader\Controller {
9.
10. function __construct() {
11. }
12.
13. function tryit() {
14.
15. $config = [
16. 'region'=>'<tj/sh/gd>',
17. 'appid'=>'<your appid>',
18. 'bucket'=>'<your bucket>',
19. 'SecretID'=>"<your SecretID>",
20. 'SecretKey'=>"<your SecretKey>"
21. ];
22. $cos = App::M('Cos',$config);
23. $content =file_get_contents("http://7xleg1.com1.z0.glb.clouddn.com/x1/2/lab/uploadit.jpg");
24. $resp = $cos->upload( $content, ['region'=>$config['region'], '
filetype'=>'jpg'] );
25. Utils::out($resp);
26. }
27.
28. }

第三步: 提交代码并更新线上

1. git add *
2. git commit -m '+COS Tryit {{pull}}' # {{pull}} feed 指令更新线上代码
3. git push

第四步: 安装 XQCloud 应用

访问 https://dev.appcook.cn/core-system/appmanager/index , 安装应用

第五步: 登录云主机,运行测试

1. docker exec -it xpmjs-server /bin/bash # 进入容器
2. tdm app run /apps/xqcloud/controller/Cos.php tryit # 运行测试

3.3 封装图片上传接口

第一步:创建配置文件 vi xqcloud/config.php

1. <?php
2. $GLOBALS['_QC'] = [
3. 'cos'=>[
4. 'region'=>'<tj/sh/gd>',
5. 'appid'=>'<your appid>',
6. 'bucket'=>'<your bucket>',
7. 'SecretID'=>"<your SecretID>",
8. 'SecretKey'=>"<your SecretKey>"
9. ]
10. ];

第二步:修改控制器 vi xqcloud/controller/Cos.php

1. <?php
2. require_once(__DIR__ . '/../config.php');
3. use \Tuanduimao\Loader\App as App;
4. use \Tuanduimao\Utils as Utils;
5. use \Tuanduimao\Tuan as Tuan;
6. use \Tuanduimao\Excp as Excp;
7. use \Tuanduimao\Conf as Conf;
8.
9. class CosController extends \Tuanduimao\Loader\Controller {
10.
11. function __construct() {
12. }
13.
14. /**
15. * 上传文件接口
16. * @return [type] [description]
17. */
18. function upload() {
19.
20. $file = !empty($_FILES['wxfile']) ? $_FILES['wxfile'] : [];
21. $content = !empty($file['content']) ?base64_decode($file['content']) : NULL;
22. $filetype = Utils::mimes()->getExtension($file['type']);
23.
24. if ( $content == null ) {
25. echo (new Excp("未接收到文件", 502, ['_FILES'=>$_FILES]))->toJSON();
26. return; 
27. }
28.
29. $config = $GLOBALS['_QC']['cos'];
30. $cos = App::M('Cos',$config);
31. try {
32. $resp = $cos->upload( $content, ['region'=>$config['region' ], 'filetype'=>$filetype] );
33. } catch( Excp $e ){
34. $extra = $e->getExtra();
35. echo (new Excp("COS API 错误", 502, ['resp'=>$resp, 'e'=>$extra]))->toJSON();
36. return;
37. }
38. if ( $resp['code'] == 0) {
39. Utils::out($resp['data']);
40. return;
41. }
42. echo (new Excp("COS API 错误", 502, ['resp'=>$resp]))->toJSON();
43. return;
44.
45. }
46. }

第三步: 提交代码更新

1. git add *
2. git commit -m '+COS Upload {{pull}}' # {{pull}} feed 指令更新线上代码
3. git push

第四步: 登录云主机,运行测试

1. docker exec -it xpmjs-server /bin/bash # 进入容器
2. cd ~
3. wget http://wxapp-1252011659.file.myqcloud.com/4883017283.jpg
4. tdm app run /apps/xqcloud/controller/Cos.php upload --f='''{"wxfile":"4883017283.jpg"}''' --vv

四、实验结果

通过调用 COS 接口,掌握 RESTFul API 调用和调试的方法;通过封装图片上传接口,掌握RESTFul API 的封装方法。

如果你看了以上的文章觉得不过瘾。想要系统性学习如何在腾讯云上开发微信小程序,建议报名参加我们的TCCE微信开发课程培训:https://www.qcloud.com/training/courses/wx-dev

相关推荐

如何用Baas快速在腾讯云上开发小程序之系列2:搭建Phabricator开发管理平台

如何用Baas快速在腾讯云上开发小程序之系列4:实现客户侧商品列表、商品详情页程序

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–现金管理(160)-7 FF6B归档凭证记录

4.2 FF6B归档凭证记录 使用该事务管理现金状态和流动预测的计划凭证记录。系统在清单中显示这些凭证记录。还可以选择单个记录进行显示和修改。 在该清单中,可选...

2695
来自专栏FreeBuf

“净广大师”病毒HTTPS劫持技术深度分析

一、背景 近期,火绒团队截获一个由商业软件携带的病毒,并以其载体命名为“净广大师”病毒。在目前广为流行的“流量劫持”类病毒中,该病毒策略高明、技术暴力,并攻破H...

2638
来自专栏FreeBuf

一款名为Rapid的勒索软件正在迅速传播

2017年勒索软件成为安全界的一个热门关注点,很多安全公司预测2018年它仍会是危害用户安全的一个重点。近期安全人员发现,一款名为Rapid的勒索软件正在快速传...

2378
来自专栏安恒信息

以银行为目标的Office 0day漏洞利用木马分析

步骤分析 近日,国外安全厂商McAfee和FireEye发现了一个针对银行的木马,该木马利用了一个Office零日漏洞发起攻击,危害性非常高,经过安恒研究院分析...

3497
来自专栏晓晨的专栏

ASP.NET Core 2.0 支付宝当面付之扫码支付

2102
来自专栏黑白安全

黑客通过远程桌面服务安装新型 Matrix 勒索软件变体

MalwareHunterTeam 本周发现了两个新的 Matrix Ransomware 变体,这些变体正在通过被黑客入侵的远程桌面服务进行安装。尽管这两种变...

1133
来自专栏FreeBuf

揭秘银行木马Chthonic:网银大盗ZeuS的最新变种

说到Zeus/Zbot,做安全多多少少都会有所了解。Zeus是对金融系统威胁最大的僵尸网络之一,控制者借助僵尸程序窃取账户登录信息和信用卡号码。Zbot往往通过...

1897
来自专栏FreeBuf

揭秘来自中国的数字货币“挖矿”军团 – Bondnet僵尸网络

最近,以色列安全公司GuardiCore发现了一个名为Bondnet的僵尸网络,该僵尸网络由数万台被控制的具备不同功率的服务器肉鸡组成。从目前的情况来看,幕后运...

24910
来自专栏happyJared

Docker + anoyi-blog 打造专属个人简书

  anoyi-blog,一款有趣的开源个人博客建站工具,简单梳理下分享给大家。该工具基于 Docker, 可快速搭建和一键生成个人博客,用于实时解析简书文章、...

791
来自专栏FreeBuf

Petya勒索软件新变种详细分析报告

目录 Petya勒索软件新变种详细分析报告 Petya新变种简介 传播渠道分析 可能传播渠道-邮箱传播 可能传播渠道-MeDoc 详细功能分析 感染过程分析 磁...

3328

扫码关注云+社区

领取腾讯云代金券