博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序/网站 上传图片到腾讯云COS
阅读量:5748 次
发布时间:2019-06-18

本文共 2920 字,大约阅读时间需要 9 分钟。

COS简介: 腾讯云提供的一种对象存储服务,供开发者存储海量文件的分布式存储服务。可以将自己开发的应用的存储部分全部接入COS的存储桶中,有效减少应用服务器的带宽,请求等。个人也可以通过腾讯云账号免费使用COS6个月,https://cloud.tencent.com/product/cos

整体流程简介: 

1. 前端引入cos的SDK文件

2. 监听上传控件,并在图片加载至网页临时流中发起签名请求

3.后端根据上传的请求方式和路径参数返回签名Authorization和token XCosSecurityToken

4.前端再根据返回的参数和SDK以3的请求方式上传图片。

PHP签名返回流程:

1.在腾讯云的建好存储桶并配置CORS规则https://cloud.tencent.com/document/product/436/11459

2.在平台上拿到Bucket(存储桶),Region(地域),SecretId,SecretKey等参数。

3.使用(SecretId,Timestamp…)参数进行签名通过腾讯云的接口获取临时密钥,返回给前端的token也在临时密钥中

4.根据前端传的(上传请求方式,路径)和临时密钥进行签名(前端上传所使用的)并返回。

一、PHP获取签名部分(tp5)

'https://sts.api.qcloud.com/v2/index.php', 'Domain' => 'sts.api.qcloud.com', 'Proxy' => '', 'SecretId' => 'AK********************BLK9nF5dZL', // 固定密钥 'SecretKey' => 'jHj5G*********************IUcqJu', // 固定密钥 'Bucket' => 'activity-1255484416', // 存储桶 'Region' => 'ap-guangzhou', 'AllowPrefix' => '*', // 这里改成允许的路径前缀,这里可以根据自己网站的用户登录态判断允许上传的目录,例子:* 或者 a/* 或者 a.jpg ); /** * @title 获取签名入口 * http://119.29.10.64/v1/Cosauth/getCosAuth */ public function getCosAuth() { // $data['say'] = 'hello'; // echo json_encode($data); // die; // 缓存临时密钥 if (!isset($_SESSION['tempKeysCache'])) { $_SESSION['tempKeysCache'] = array( 'policyStr' => '', 'expiredTime' => 0 ); } // 获取前端过来的参数 // $method = isset($_GET['method']) ? $_GET['method'] : 'get'; // $pathname = isset($_GET['pathname']) ? $_GET['pathname'] : '/'; $method = input('method') ? input('method') : 'post'; $pathname = input('pathname') ? input('pathname') : '/'; $callback = input('callback') ? input('callback') : ''; // 前端跨域的jsonp参数(可忽略) // 获取临时密钥,计算签名 $tempKeys = $this->getTempKeys(); if ($tempKeys && $tempKeys['credentials']) { // $datas = $this->getAuthorization($tempKeys, $method, $pathname); // echo json_encode($datas); // die; $data = array( 'Authorization' => $this->getAuthorization($tempKeys, $method, $pathname), 'XCosSecurityToken' => $tempKeys['credentials']['sessionToken'], ); } else { $data = array('error'=> $tempKeys); } //echo $callback . '(' . json_encode($data) . ')'; // 通过回调返回给其他域(可忽略) echo json_encode($data); // 正常写法的返回 die; } // json 转 query string public function json2str($obj, $notEncode = false) { ksort($obj); $arr = array(); foreach ($obj as $key => $val) { !$notEncode && ($val = urlencode($val)); array_push($arr, $key . '=' . $val); } return join('&', $arr); } // 计算临时密钥用的签名 public function getSignature($opt, $key, $method) { //global $config; $formatString = $method . $this->config['Domain'] . '/v2/index.php?' . $this->json2str($opt, 1); $sign = hash_hmac('sha1', $formatString, $key); $sign = base64_encode(hex2bin($sign)); return $sign; } // 获取临时密钥 public function getTempKeys() { //global $config; // 判断是否修改了 AllowPrefix if ($this->config['AllowPrefix'] === '_ALLOW_DIR_/*') { return array('error'=> '请修改 AllowPrefix 配置项,指定允许上传的路径前缀'); } $ShortBucketName = substr($this->config['Bucket'],0, strripos($this->config[

转载于:https://www.cnblogs.com/zerofc/p/9038875.html

你可能感兴趣的文章
[阿里云Java Web环境搭建]二、Ubuntu安装JDK
查看>>
大学生毕业后想成为产品经理?那你得先从以下几个方面入手!
查看>>
商品定时器
查看>>
记一次微信小程序动画实现
查看>>
Spring注解基础笔记
查看>>
HBase在移动广告监测产品中的应用
查看>>
Centos7下安装FastDFS和nginx的详细步骤
查看>>
spring boot websocket广播式
查看>>
设计模式之单例模式
查看>>
技术分享 | 基于 Tron 的 Dapp 开发实战分享
查看>>
CITA 是如何达到 15000 TPS 的?
查看>>
老司机 iOS 周报 #64 | 2019-04-22
查看>>
学习笔记(4.18)
查看>>
去年居民消费价格上涨1.6%
查看>>
5年前端开发程序员教你如何写简历!看完别再问为何你只值5K
查看>>
小技巧:SpringBoot项目如何让前端开发提高效率?
查看>>
CAShaperLayer&UIBezierPath系列(一)
查看>>
GAN 学习笔记(不断更新)
查看>>
创建一个python类
查看>>
使用JS创建条形码在线生成工具-toolfk.com
查看>>