uniapp 如何上传图片到腾讯云COS
在uniapp中如何实现图片上传到腾讯云COS的功能?需要具体步骤和代码示例,包括前端选择图片、获取临时路径,以及后端如何配置COS的密钥和bucket信息。是否需要在uniapp中引入SDK,还是直接通过API接口上传?上传过程中如何保证安全性和处理可能的错误?
2 回复
使用uni.chooseImage选择图片,通过uni.uploadFile上传到腾讯云COS。需配置COS的SecretId、SecretKey和存储桶信息,注意在服务端生成临时密钥更安全。
在 UniApp 中上传图片到腾讯云 COS(对象存储),可以通过以下步骤实现。示例代码基于 COS JavaScript SDK,适用于 H5 和小程序环境。
步骤概述:
- 安装 COS SDK:在项目中引入腾讯云 COS SDK。
- 获取临时密钥:从后端获取临时密钥(推荐使用临时密钥,避免泄露永久密钥)。
- 选择图片:使用 UniApp API 选择本地图片。
- 上传到 COS:调用 SDK 上传文件。
示例代码:
// 1. 引入 COS SDK(需先安装,H5 通过 npm 安装,小程序需下载 min.js 并导入)
// 对于小程序,下载 cos-wx-sdk-v5.min.js 放到项目目录,然后:
import COS from '@/utils/cos-wx-sdk-v5.min.js'; // 调整路径
// 2. 初始化 COS 实例(使用临时密钥)
const cos = new COS({
getAuthorization: function (options, callback) {
// 从后端获取临时密钥(替换为你的后端 API)
uni.request({
url: 'https://your-server.com/sts', // 后端临时密钥接口
method: 'GET',
success: (res) => {
const data = res.data;
callback({
TmpSecretId: data.tmpSecretId,
TmpSecretKey: data.tmpSecretKey,
SecurityToken: data.sessionToken,
StartTime: data.startTime, // 可选
ExpiredTime: data.expiredTime, // 可选
});
},
error: (err) => {
console.error('获取密钥失败:', err);
uni.showToast({ title: '上传失败', icon: 'none' });
}
});
}
});
// 3. 选择并上传图片
async function uploadImage() {
try {
// 选择图片(示例为选择单张)
const res = await uni.chooseImage({
count: 1,
sizeType: ['compressed'], // 可压缩
sourceType: ['album', 'camera'] // 相册或相机
});
const file = res.tempFiles[0];
const key = `images/${Date.now()}_${file.name}`; // 生成唯一文件名
// 上传到 COS
cos.putObject({
Bucket: 'your-bucket-1250000000', // 替换为你的存储桶名称
Region: 'ap-beijing', // 替换为你的存储桶地域
Key: key,
Body: file, // 文件对象
onProgress: function (progressData) {
console.log('上传进度:', JSON.stringify(progressData));
}
}, function (err, data) {
if (err) {
console.error('上传失败:', err);
uni.showToast({ title: '上传失败', icon: 'none' });
} else {
console.log('上传成功:', data.Location);
uni.showToast({ title: '上传成功' });
// 返回文件 URL(如 https://your-bucket.cos.ap-beijing.myqcloud.com/images/xxx.jpg)
}
});
} catch (error) {
console.error('选择图片失败:', error);
}
}
注意事项:
- 临时密钥:务必通过后端获取(使用 STS 服务),避免前端暴露永久密钥。
- 存储桶配置:在腾讯云 COS 控制台设置 CORS 规则,允许你的域名。
- 小程序环境:需在
manifest.json的mp-weixin部分添加"requiredPrivateInfos": ["chooseImage"]权限。 - 文件路径:上传成功后,COS 返回
data.Location可拼接为完整访问 URL。
简化方案(仅 H5):
如果仅用于 H5,可使用 XMLHttpRequest 直接上传,但临时密钥仍需后端支持。
以上代码覆盖了核心流程,根据实际需求调整参数(如 Bucket、Region)。

