欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

腾讯云 - 对象存储服务(COS)摘要 - JavaScript 章节

最编程 2024-07-12 13:40:16
...
import modal from '@/utils/modal.js'; import request from '@/utils/request'; import COS from 'cos-js-sdk-v5'; const cosSessionKey = 'cos_session' /**获取cos临时密钥等信息*/ function getCosInfo() { return new Promise((resolve, rejct) => { request({ url: '/system/cos/get', method: 'get', }).then(res => { var data = res.data if (data) { uni.setStorageSync(cosSessionKey, data); resolve(data); } }) }) } var cos = new COS({ SimpleUploadMethod: 'putObject', getAuthorization: function(options, callback) { var cosData = uni.getStorageSync(cosSessionKey); callback({ TmpSecretId: cosData.secretId, TmpSecretKey: cosData.secretKey, // v1.2.0之前版本的 SDK 使用 XCosSecurityToken 而不是 SecurityToken SecurityToken: cosData.sessionToken, // 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误 StartTime: cosData.startTime, // 时间戳,单位秒,如:1580000000 ExpiredTime: cosData.expiredTime, // 时间戳,单位秒,如:1580000900 }); } }); // 上传文件到腾讯云 const cosUpLoadFile = async (params) => { let uploadFile = ''; await uniChooseImage().then(res => { uploadFile = res }) return cosUploadFile(uploadFile, params); }; // 选择图片 const uniChooseImage = () => { return new Promise((resolve, rejct) => { uni.chooseImage({ // 从本地相册选择图片或使用相机拍照。 count: 1, //默认选择1张图片 sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有 success: res1 => { resolve(res1.tempFiles[0]); } }); }); } const cosUploadFile = async (file, params) => { var cosData = uni.getStorageSync(cosSessionKey); if (!cosData || !cosData.bucket) { //如果cos信息不存在 //等待获取到cosData await getCosInfo().then(res => { cosData = res }); } let promise = new Promise((resolve, rejct) => { modal.loading("上传中...") cos.uploadFile({ /* 填入您自己的存储桶,必须字段 */ Bucket: cosData.bucket, /* 存储桶所在地域,例如ap-beijing,必须字段 */ Region: cosData.region, /* 存储在桶里的对象键(例如1.jpg,a/b/test.txt),必须字段 */ Key: params.uploadKey, /* 必须,上传文件对象,可以是input[type="file"]标签选择本地文件后得到的file对象 */ Body: file, /* 触发分块上传的阈值,超过5MB使用分块上传,非必须 */ SliceSize: 1024 * 1024 * 5, onTaskReady: function(taskId) { /* 非必须 */ console.log(taskId); }, onProgress: function(progressData) { /* 非必须 */ console.log(JSON.stringify(progressData)); }, onFileFinish: function(err, data, options) { /* 非必须 */ console.log(options.Key + '上传' + (err ? '失败' : '完成')); }, // 支持自定义headers 非必须 Headers: { 'x-cos-meta-test': 123 }, }, function(err, data) { if (data && data.statusCode == 200) { let datas = { imgUrl: 'https://' + data.Location, imgKey: params.uploadKey } resolve(datas); } else if (err && err.statusCode == 403) { if ("Request has expired" == err.message) { console.log("失效Request has expired!重新获取cos信息"); uni.removeStorageSync(cosSessionKey); cosUploadFile(file, params).then(res => { resolve(res); }); } } else { modal.msg(err ? err.message : "上传失败!"); } uni.hideLoading(); }); }); return promise; } const cosDeleteFile = async (params) => { var cosData = uni.getStorageSync(cosSessionKey); if (!cosData || !cosData.bucket) { //如果cos信息不存在 //等待获取到cosData await getCosInfo().then(res => { cosData = res }); } console.log(params.uploadKey); cos.deleteObject({ /* 填入您自己的存储桶,必须字段 */ Bucket: cosData.bucket, /* 存储桶所在地域,例如ap-beijing,必须字段 */ Region: cosData.region, Key: params.uploadKey, }, function(err, data) { console.log("deleteObject"); console.log(err || data); if (err && err.statusCode == 403) { if ("Request has expired" == err.message) { console.log("失效Request has expired!重新获取cos信息"); uni.removeStorageSync(cosSessionKey); cosDeleteFile(params); } } }); } export default { cosUpLoadFile, cosDeleteFile }