New file |
| | |
| | | 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 |
| | | } |
| | | }) |
| | | } |