/**
* 获取视频
* @param {number} count 最多可以选择的文件个数
* @param {Array<String>} sourceType album 从相册选视频,camera 使用相机拍摄
* @param {Array<String>} sizeType 可以指定是原图还是压缩图,默认二者都有
* @returns {Promise<unknown>}
*/
export const chooseVideoByPromise = ({
count = 9,
sourceType = ['camera', 'album'],
sizeType = ['original', 'compressed'],
progressList = [],
} = {}) => {
return new Promise((resolve, reject) => {
uni.chooseVideo({
count,
sizeType,
success(res) {
console.log(res, 'rrrr')
// #ifdef APP-PLUS
resolve(
uploadFile({
imgs: [res.tempFile || res.tempFilePath],
progressList,
isPath: true,
pathType: 'video.mp4',
}),
)
// #endif
// #ifndef APP-PLUS
resolve(uploadFile({ imgs: [res.tempFile || res.tempFilePath], progressList }))
// #endif
// resolve(res)
},
fail(err) {
reject(err)
},
complete() {},
})
})
}
/**
* 获取图片
* @param count
* @param sizeType
* @sourceType
* @returns {Promise<unknown>}
*/
export const chooseImageByPromise = ({
count = 9,
sourceType = ['camera', 'album'],
sizeType = ['original', 'compressed'],
progressList = [],
} = {}) => {
return new Promise((resolve, reject) => {
uni.chooseImage({
count,
sizeType, // 可以指定是原图还是压缩图,默认二者都有
success(res) {
console.log(res, 'sss')
resolve(uploadFile({ imgs: res.tempFiles, progressList }))
},
fail(err) {
reject(err)
},
complete() {},
})
})
}
/**
* 批量上传照片
* @param imgs string:[]
* @param name 标识
* @param data 业务参数:{}
* @returns {Promise<unknown>}
*/
export const uploadFile = ({
imgs,
data,
progressList = [],
isPath = false,
pathType = 'video',
}) => {
const taskList = []
console.log(imgs, 'sss')
for (let i = 0; i < imgs.length; i++) {
const taskItem = upload({
url: imgs[i],
name: isPath ? pathType : imgs[i].name,
idx: i,
progressList,
formData: data,
isPath,
})
taskList.push(taskItem)
}
return new Promise((resolve, reject) => {
Promise.all(taskList)
.then((urls) => {
console.log(urls, 'urls')
resolve(urls)
})
.catch((err) => {
const errMsg = Object.hasOwnProperty.call(err, 'errMsg') ? err.errMsg : err
reject(errMsg)
})
})
}
/**
* @description 上传图片
* @param url
* @returns {Promise<unknown>}
*/
export const upload = ({ url, name, data, isPath = false }) => {
console.log(url, 'upload-----urlrurl')
let _this = this
let fileName =
Date.now() +
Math.floor(Math.random() * (100 - 0)) * Math.floor(Math.random() * (100 - 0)) +
name
return new Promise((resolve, reject) => {
// 此处替换为你自己的网络请求方法
VoHttp.apiCreatedCosGet({
businessType: 1,
fileUrl: 1,
}).then((res) => {
var formData = {
key: fileName,
policy: res.data.policy, // 这个传 policy 的 base64 字符串
success_action_status: 200,
'q-sign-algorithm': 'sha1',
'q-ak': res.data.secretId,
'q-key-time': res.data.KeyTime,
'q-signature': res.data.qSignature,
'x-cos-security-token': res.data.secretToken,
}
formData = { ...data, ...formData }
// 如果服务端用了临时密钥计算,需要传 x-cos-security-token
// formData['x-cos-security-token'] = formData.securityToken
let options = {
url: devConf.tencentCosUrl, //仅为示例,非真实的接口地址
name: 'file',
formData: formData,
success: (res) => {
resolve({ fileName: fileName, fileNameUrl: devConf.tencentCosUrl + '/' + fileName })
},
fail(err) {
reject(err)
},
}
//是否上传路径
if (isPath) {
options.filePath = url
} else {
options.file = url
}
uni.uploadFile(options)
})
})
}
uniapp app h5 小程序腾讯直传cos
最新推荐文章于 2025-02-13 17:09:46 发布