|
|
function pickExclude(obj, keys) { // 某些情况下,type可能会为
if (!['[object Object]', '[object File]'].includes(Object.prototype.toString.call(obj))) { return {} } return Object.keys(obj).reduce((prev, key) => { if (!keys.includes(key)) { prev[key] = obj[key] } return prev }, {}) }
function formatImage(res) { return res.tempFiles.map((item) => ({ ...pickExclude(item, ['path']), type: 'image', url: item.path, thumb: item.path, size: item.size, // #ifdef H5
name: item.name // #endif
})) }
function formatVideo(res) { return [ { ...pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg']), type: 'video', url: res.tempFilePath, thumb: res.thumbTempFilePath, size: res.size, // #ifdef H5
name: res.name // #endif
} ] }
function formatMedia(res) { return res.tempFiles.map((item) => ({ ...pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath']), type: res.type, url: item.tempFilePath, thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath, size: item.size })) }
function formatFile(res) { return res.tempFiles.map((item) => ({ ...pickExclude(item, ['path']), url: item.path, size:item.size, // #ifdef H5
name: item.name, type: item.type // #endif
})) } export function chooseFile({ accept, multiple, capture, compressed, maxDuration, sizeType, camera, maxCount }) { return new Promise((resolve, reject) => { switch (accept) { case 'image': uni.chooseImage({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture, sizeType, success: (res) => resolve(formatImage(res)), fail: reject }) break // #ifdef MP-WEIXIN
// 只有微信小程序才支持chooseMedia接口
case 'media': wx.chooseMedia({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture, maxDuration, sizeType, camera, success: (res) => resolve(formatMedia(res)), fail: reject }) break // #endif
case 'video': uni.chooseVideo({ sourceType: capture, compressed, maxDuration, camera, success: (res) => resolve(formatVideo(res)), fail: reject }) break // #ifdef MP-WEIXIN || H5
// 只有微信小程序才支持chooseMessageFile接口
case 'file': // #ifdef MP-WEIXIN
wx.chooseMessageFile({ count: multiple ? maxCount : 1, type: accept, success: (res) => resolve(formatFile(res)), fail: reject }) // #endif
// #ifdef H5
// 需要hx2.9.9以上才支持uni.chooseFile
uni.chooseFile({ count: multiple ? maxCount : 1, type: accept, success: (res) => resolve(formatFile(res)), fail: reject }) // #endif
break // #endif
default: // 此为保底选项,在accept不为上面任意一项的时候选取全部文件
// #ifdef MP-WEIXIN
wx.chooseMessageFile({ count: multiple ? maxCount : 1, type: 'all', success: (res) => resolve(formatFile(res)), fail: reject }) // #endif
// #ifdef H5
// 需要hx2.9.9以上才支持uni.chooseFile
uni.chooseFile({ count: multiple ? maxCount : 1, type: 'all', success: (res) => resolve(formatFile(res)), fail: reject }) // #endif
} }) }
|