You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							151 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							151 lines
						
					
					
						
							3.9 KiB
						
					
					
				
								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
							 | 
						|
								        }
							 | 
						|
								    })
							 | 
						|
								}
							 |