uni-cos-sts-upload
v1.0.2
Published
在 uni-app 开发的 app 中,解决实现 app 直传 cos 没有现成 SDK 问题。非 uni-app 做 app 项目,建议优先考虑腾讯云官方SDK,本SDK仅提供 postObject 能力,没有实现全部 cos 能力。
Readme
在 uni-app 开发的 app 中,解决实现 app 直传 cos 没有现成 SDK 问题。非 uni-app 做 app 项目,建议优先考虑腾讯云官方SDK,本SDK仅提供 postObject 能力,没有实现全部 cos 能力。
如何使用
- 安装sdk
npm install uni-cos-sts-upload或yarn add uni-cos-sts-upload - 引用示例,并
new一个新的实例(假设是cos),配置好默认getAuthorization函数 - 在业务代码中,使用
cos.putObject(文件路径,对象路径)的方式来实现上传
参考业务代码
工具类封装
// src/utils/cos.js
import { UniCosStsUpload } from "uni-cos-sts-upload";
export default new UniCosStsUpload({
async getAuthorization() {
return new Promise((resolve, reject) => {
uni.request({
url: "https://localhost/xxx", // 这里是你们后端提供的sts临时秘钥获取地址
success(res) {
// 在这里了将接口返回的临时秘钥信息返回给SDK
// sessionToken: 临时密钥安全令牌(必须)
// tmpSecretId: 临时密钥ID(必须)
// tmpSecretKey: 临时密钥KEY(必须)
// bucket: 存储桶名称(非必须,可以APP端写死定制,根据自己业务决定)
// region: 存储桶地域(非必须,可以APP端写死定制,根据自己业务决定)
// 大部分情况下,一个app不用关联多个cos服务,所以理论是 bucket 和 region 可以 app 端写死,没有风险
// 但也有一部分业务确实有一个app关联多个cos服务支持,或者后端想要灵活一点,就可以从接口返回的信息中获取
resolve({
sessionToken: res.data.credentials.sessionToken,
tmpSecretId: res.data.credentials.tmpSecretId,
tmpSecretKey: res.data.credentials.tmpSecretKey,
bucket: res.data.bucket,
region: res.data.region,
});
},
});
});
}
});业务代码示例
import cos from "../utils/cos.js";
function pickerImage() {
uni.chooseImage({
count: 1,
success: async ({ tempFilePaths }) => {
for (let tempFilePath of tempFilePath) {
let response = await cos.putObject(tempFilePath, "xxx/xxx.png");
console.log("文件信息", response);
}
}
})
}后端代码参考
本人不是后端,但不表示不会写,这里提供一个简单的参考,仅供参考,具体实现方式根据自己业务决定。
php
composer.json
{
"require": {
"qcloud_sts/qcloud-sts-sdk": "3.0.*"
}
}
.env
# 腾讯云对象存储临时上传秘钥相关
OSS_SECRET_ID=xxx
OSS_SECRET_KEY=xxx
OSS_BUCKET=xxx
OSS_REGION=xxxController
<?php
use QCloud\COSSTS\Sts;
class CosController
{
public function getOSSTempUploadCredentials(): Response
{
try {
$config = [
"secretId" => getenv("OSS_SECRET_ID"),
"secretKey" => getenv("OSS_SECRET_KEY"),
"durationSeconds" => 3600,
"bucket" => getenv("OSS_BUCKET"),
"region" => getenv("OSS_REGION"),
"allowPrefix" => ["uploads/*"],
"allowActions" => [
"name/cos:PostObject"
]
];
$sts = new Sts();
$tempKeys = $sts->getTempKeys($config);
$resTemp = array_merge(
$tempKeys,
[
'startTime' => time(),
'bucket' => $config['bucket'],
'region' => $config['region']
]
);
return $this->jsonResponse->success($resTemp);
} catch (\Exception $e) {
return $this->jsonResponse->error($e->getMessage());
}
}
}