## 上传图片到腾讯云对象存储:示例腾讯云 ### 前端:wepy2 ### 后台:egg ### 平台:微信小程序 * 文档:https://cloud.tencent.com/document/product/436 - 直传实践文档: https://cloud.tencent.com/document/product/436/34929 - 临时密钥生成及使用指引 https://cloud.tencent.com/document/product/436/14048 * 访问权限:私有读写 ## 步骤 * 前期条件 - 1. 登录[对象存储控制台](https://console.cloud.tencent.com/cos5),创建存储桶,设置 BucketName(存储桶名称) 和 Region(地域名称),详情请参见[创建存储桶](https://cloud.tencent.com/document/product/436/13309)文档。 - 2. 登录[访问管理控制台](https://console.cloud.tencent.com/cam/capi),进入 API 密钥管理页面,获取您的项目 SecretId 和 SecretKey。 * 实践步骤 - 1. 配置小程序域名白名单 > 小程序里请求 COS 需要登录到微信公众平台,在“开发”->“开发设置”中,配置域名白名单。SDK 用到了两个接口:wx.uploadFile 和 wx.request。 > cos.postObject 使用 wx.uploadFile 发送请求。 > 其他方法使用 wx.request 发送请求。 - 2. 获取临时密钥和计算签名 > 利用qcloud-cos-sts-sdk:https://github.com/tencentyun/qcloud-cos-sts-sdk/tree/master/nodejs获取临时密钥 > 利用cos-auth:https://unpkg.com/cos-js-sdk-v5@1.2.13/demo/common/cos-auth.min.js 获取签名 ## 云对象存储配置文件 ``` module.exports = { SecretId: '**********', SecretKey: '****************', Bucket: 'qycgs-data-1301661839', Region: 'ap-guangzhou' } ``` ## 后台配置cosService文件 ![](https://img.kancloud.cn/35/50/3550afa5581416f4cba9ba4be43e4a31_1200x4054.png) * getObjectUrl():获取私有读写权限的图片地址 > cos-nodejs-sdk-v5:https://cloud.tencent.com/document/product/436/8629 * initConfigParams & policy 都是配置信息详情看文档qcloud-cos-sts-sdk ## 后台生成云对象存储的临时密钥 + 配置信息 ![](https://img.kancloud.cn/3d/fc/3dfc740344ac4ca88bdba11b85144822_1184x1568.png) ## 前端根据返回的信息,进行签名上传到云平台 ![](https://img.kancloud.cn/a7/5a/a75aff4c9b6a0345a8f5ddeab61a2eba_882x624.png) * GetUploadParams返回的数据: ``` { "code": 200, "result": { "expiredTime": 1624264112, "expiration": "2021-06-21T08:28:32Z", "credentials": { "sessionToken": "*********", "tmpSecretId": "*******", "tmpSecretKey": "********" }, "requestId": "*********", "startTime": 1624262312, "Bucket": "qycgs-data-1301661839", "Region": "ap-guangzhou", "fileName": "*******" } } ``` * 向服务端获取临时密钥,服务端首先使用固定密钥 SecretId、SecretKey 向 STS 服务获取临时密钥,得到临时密钥 tmpSecretId、tmpSecretKey、sessionToken, ## uploadFileToCos上传的具体执行过程 ![](https://img.kancloud.cn/ea/fb/eafb805cca78d8a9a18168de1d9174c1_1226x3424.png) * 将计算得到的签名和 sessionToken,分别放到小程序发请求时 formData 的 Signature 和 x-cos-security-token 字段里,向 COS API 发出上传请求。