uniapp微信小程序腾讯云cos对象储存
由于我也是第一次用腾讯云cos的对象储存,有什么不对的地方请谅解下,或回复下呗!
cos-wx-sdk-v5.js下载sdk就不用了说吧,直接进官网下载
我用的时候是封装进行的
1.先引用cos-wx-sdk-v5,将桶名和地区设置好
var COS = require('cos-wx-sdk-v5'); const Bucket = ''; //存储桶的名称,命名规则为 BucketName-APPID,此处填写的存储桶名称必须为此格式 const Region = ''; //存储桶所在地域
2.创建对象储存的实例了·
//上传图片到腾讯云 ("- ")批量上传
function uploadFileToTencentClound(files, filename) {
//files传过来的数据数组,filename需要上传的文件名
return new Promise((resolve, reject) => {
var fileList = files.map(function(file) {
return Object.assign(file, {
Bucket: Bucket,
Region: Region,
Key: filename + file.name,
FilePath: file.path,
onTaskReady: function(taskId) {
/* taskId可通过队列操作来取消上传cos.cancelTask(taskId)、停止上传cos.pauseTask(taskId)、重新开始上传cos.restartTask(taskId) */
console.log(taskId, 'wewewe');
}
})
})
cos.uploadFiles({
files: fileList,
SliceSize: 1024 * 1024 * 10,
/* 设置大于10MB采用分块上传 */
onProgress: function(info) {
var percent = parseInt(info.percent * 10000) / 100;
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
},
onFileFinish: function(err, data, options) {
console.log(err, '上传失败')
console.log(options.Key + '上传' + (err ? '失败' : '完成'));
},
}, function(err, data) {
console.log(err || data);
resolve(data.files)
});
})
}
(0)-(0)。。。。。从后端获取的密钥进行上传
// 必选参数
let type = uni.getStorageSync('type')
let key = state.state.key
if (!key) {
return false
}
let token = uni.getStorageSync('token')
uni.request({
url: '',
data: {
type: 1,
key: key,
},
method: "GET",
header: {
"Content-Type": 'application/json',
'token': token
},
success: function(result) {
var data = result.data.data;
var credentials = data.credentials;
if (!credentials) return console.error('credentials invalid');
let callback={
TmpSecretId: credentials.tmpSecretId,
TmpSecretKey: credentials.tmpSecretKey,
XCosSecurityToken: credentials.sessionToken,
StartTime: data.startTime,
ExpiredTime: data.expiredTime,
ScopeLimit: true, //传到多个文件的话,必须要的参数,如果不加,你会发现,第一次传的可能会成功,第二次就不会,因为你创建的实例只有第一次使用到了,加了这个它会根据使用的密钥不同,而进行创建实例
}
uni.setStorageSync('callback', callback)
}
});
!- !然后就导出呗
3.用的时候呢
引用哪个封装的js文件
import COS from ‘…/…/static/cos.js’;
上传图片
uni.chooseImage({
count: 9,
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: chooseImageRes => {
let filePath = chooseImageRes.tempFiles;
filePath.forEach(item => {
item.name = item.path.substr(item.path.lastIndexOf('/') + 1);
})
// 给上传的图片设置好名字
// 这里我用用vuex进行储存需要上传的图片或者视频
_self.$store.commit('image',filePath)
sever.navigateTo(url)
_self.shows = false
}
})
然后把图片传入封装的文件里
//filePath是上传的图片数据已,filename是需要上传到桶里的文件名字,我这边是后台传过来了的!如果定死了就不需要了,直接在封装的地方写死把
COS.uploadFileToTencentClound(filePath, filename).then((image) => {
console.log(image, '上传过后的返回的图片地址')
image.forEach(item => {
let file = 'https://' + item.data.Location
files.push(file)
})
//这下面就用管了,到这步腾讯云的cos上传操作算完了呀
console.log(files, '数组')
obj.files = files.toString()
this.classdynamic(obj)
})
最后把封装的代码展示下把
import state from '../store/index.js';
var COS = require('cos-wx-sdk-v5');
const Bucket = ''; //存储桶的名称,命名规则为 BucketName-APPID,此处填写的存储桶名称必须为此格式
const Region = ''; //存储桶所在地域
var cos = new COS({
// 必选参数
getAuthorization: function(options, callback) {
let callbacks = uni.getStorageSync('callback')
callback(callbacks)
});
//删除
function deleteFileToTencentClound(Key) {
console.log(Key)
return new Promise((resolve, reject) => {
cos.deleteObject({
Bucket: Bucket,
Region: Region,
Key: Key,
}, function(err, data) {
console.log(err || data);
resolve(data)
});
})
}
//上传图片到腾讯云 ("- ")批量上传
function uploadFileToTencentClound(files, filename) {
return new Promise((resolve, reject) => {
var fileList = files.map(function(file) {
return Object.assign(file, {
Bucket: Bucket,
Region: Region,
Key: filename + file.name,
FilePath: file.path,
onTaskReady: function(taskId) {
/* taskId可通过队列操作来取消上传cos.cancelTask(taskId)、停止上传cos.pauseTask(taskId)、重新开始上传cos.restartTask(taskId) */
console.log(taskId, 'wewewe');
}
})
})
cos.uploadFiles({
files: fileList,
SliceSize: 1024 * 1024 * 10,
/* 设置大于10MB采用分块上传 */
onProgress: function(info) {
var percent = parseInt(info.percent * 10000) / 100;
var speed = parseInt(info.speed / 1024 / 1024 * 100) / 100;
console.log('进度:' + percent + '%; 速度:' + speed + 'Mb/s;');
},
onFileFinish: function(err, data, options) {
console.log(err, '上传失败')
console.log(options.Key + '上传' + (err ? '失败' : '完成'));
},
}, function(err, data) {
console.log(err || data);
resolve(data.files)
});
})
}
export default {
uploadFileToTencentClound,
deleteFileToTencentClound
}
最后吐槽一句,脑壳疼,自己都觉的写的太繁琐了,很多地方都可以优化!有什么地方不好的请见谅哈!!!!!