2021-07-30

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
}

最后吐槽一句,脑壳疼,自己都觉的写的太繁琐了,很多地方都可以优化!有什么地方不好的请见谅哈!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值