| 
						 | 
						- /**
 -  * 阿里云OSS工具类
 -  */
 - import OSSConfig from "@/utils/oss-upload/oss/OSSConfig.js"
 - import ossConfig from '@/config.js'
 - 
 - /**
 -  * 生成一个随机的Key
 -  */
 - function storeKey() {
 - 	let s = [];
 - 	let hexDigits = "0123456789abcdef";
 - 	for (let i = 0; i < 36; i++) {
 - 		s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
 - 	}
 - 	s[14] = "4";
 - 	s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
 - 	s[8] = s[13] = s[18] = s[23] = "-";
 - 	return s.join("");
 - }
 - 
 - /**
 -  * 根据当天日期在OSS端生成文件夹
 -  */
 - function storeFolder() {
 - 	const date = new Date();
 - 	const formatNumber = n => {
 - 		n = n.toString()
 - 		return n[1] ? n : '0' + n
 - 	}
 - 	return [date.getFullYear(), date.getMonth() + 1, date.getDate()].map(formatNumber).join('-')
 - }
 - 
 - /**
 -  * 阿里云OSS上传文件, 所有具体功能的工具函数均基于此
 -  * 注意, resolve时一定为上传成功, 返回OSS上的Key
 -  * @param filePath 待上传文件的URI
 -  * @param key 存储桶中的目标文件名
 -  * @param folder 存储桶中的目标文件夹
 -  */
 - export function ossUpload(filePath, key = storeKey(), folder = storeFolder()) {
 - 	return new Promise((resolve, reject) => {
 - 		if (folder && folder?.length > 0) {
 - 			if (folder[0] == "/") folder = folder.slice(1, folder.length)
 - 			if (folder[folder.length - 1] != "/") folder += "/"
 - 			key = folder + key
 - 		}
 - 		const filePrefixArr = filePath.split(".")
 - 		key += `.${filePrefixArr[filePrefixArr.length - 1]}`
 - 		let config = {
 - 			url: OSSConfig.host,
 - 			name: 'file',
 - 			filePath,
 - 			formData: {
 - 				key,
 - 				policy: OSSConfig.policyBase64,
 - 				OSSAccessKeyId: OSSConfig.accessid,
 - 				success_action_status: '200',
 - 				signature: OSSConfig.signature,
 - 			},
 - 			success(res) {
 - 				if (res.errMsg.includes("uploadFile:ok")) {
 - 					resolve(ossConfig.aliOss.url + key)
 - 				} else {
 - 					reject(res)
 - 				}
 - 			},
 - 			fail(err) {
 - 				reject(err)
 - 			}
 - 		}
 - 		uni.uploadFile(config)
 - 	})
 - }
 - 
 - /**
 -  * 阿里云OSS上传图片
 -  * @param {compressed, key, folder, success, fail} compressed: 是否压缩 key: 存储桶中的目标文件名 folder: 存储桶中的目标文件夹
 -  */
 - export function ossUploadImage({
 - 	key,
 - 	folder,
 - 	compressed = true, //是否压缩
 - 	success, //成功时的回调
 - 	fail //失败时的回调
 - }) {
 - 	const sizeType = [compressed ? 'compressed' : 'original']
 - 	uni.chooseImage({
 - 		count: 1,
 - 		sizeType,
 - 		success(res) {
 - 			ossUpload(res.tempFilePaths[0], key, folder).then(success).catch(fail)
 - 		},
 - 		fail
 - 	})
 - }
 - 
 - /**
 -  * 阿里云OSS上传视频
 -  * @param { key, folder, sourceType, compressed, maxDuration, camera, success, fail} 
 -  * key: 存储桶中的目标文件名 folder: 存储桶中的目标文件夹 其它参数同uni.chooseVideo(mpWeixin) 
 -  */
 - export function ossUploadVideo({
 - 	key,
 - 	folder,
 - 	sourceType = ['album', 'camera'], //album 从相册选视频, camera 使用相机拍摄
 - 	compressed = true, //是否压缩所选的视频源文件
 - 	maxDuration = 60, //拍摄视频最长拍摄时间, 单位秒。最长支持 60 秒
 - 	camera = 'back', //调用相机方向, 'front'、'back', 默认'back'
 - 	success, //成功时的回调
 - 	fail //失败时的回调
 - }) {
 - 	uni.chooseVideo({
 - 		sourceType,
 - 		compressed,
 - 		maxDuration,
 - 		camera,
 - 		success(res) {
 - 			ossUpload(res.tempFilePath, key, folder).then(success).catch(fail)
 - 		},
 - 		fail
 - 	})
 - }
 - const OSS = {
 - 	ossUploadVideo,
 - 	ossUploadImage,
 - 	ossUpload
 - }
 - export default OSS;
 
 
  |