如何用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 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

Linux下巧用chattr、watch命令的实例

一、起因 前些日子,张戈在日志备份服务器加入了日志压缩的计划任务(详见服务器日志备份超节省空间的思路),结果发现监控总是发来 tar 的报警,提示存在 tar ...

3348
来自专栏小白的技术客栈

公司DNS被攻击及解决办法

DNS服务器被攻击 今天给大家说说我们的DNS服务器被攻击及解决办法。 ? 问题现象 今天上午10:30左右,公司的DNS服务器被攻击,导致平台部分服务不能...

3636
来自专栏腾讯云实验室

基于 CentOS 搭建微信小程序服务

腾讯云提供了开发者实验室帮助用户搭建微信小程序服务,教程内容如下,用户可以点击开发者实验室快速上机完成实验。

52714
来自专栏DHUtoBUAA

C#实现局域网内远程开机

1、远程开机原理      远程开机Wake on LAN(WOL),俗称远程唤醒,远程唤醒的实现主要是向目标主机发送特殊格式的数据包,是AMD公司制作的Mag...

3839
来自专栏FreeBuf

CVE-2016-10277在MOTO X手机上的漏洞利用实践

CVE-2016-10277是存在于摩托罗拉系列手机的bootloader高危漏洞,可以通过内核命令注入劫持手机的启动流程,加载攻击者控制的initramfs,...

2837
来自专栏喵了个咪的博客空间

phalcon-入门篇4(log日志和session缓存)

#phalcon-入门篇4(log日志和session缓存)# ? 本教程基于phalcon2.0.9版本 ##前言## 先在这里感谢各位phalcon技术爱好...

3165
来自专栏数据库新发现

Percona最新发布XtraBackup for MySQL 8.0

Percona在9月12日,终于宣布第一个测试用的XtraBackup for MySQL 8.0版本给大家试用:

791
来自专栏大魏分享(微信公众号:david-share)

后容器时代技术制高点:API管理平台3Scale的架构设计与部署

3582
来自专栏Jerry的SAP技术分享

在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境...

1696
来自专栏青玉伏案

IOS开发之获取Storyboard创建的ViewController

  前面的两篇博客都是学习有关屏幕适配也就是相对布局的东西,这篇博客中将会学习视图间的切换。视图间的切换我们可以用代码完成或者用storyboard来建立各个视...

2098

扫码关注云+社区