152 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | 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
 | |||
|  |         } | |||
|  |     }) | |||
|  | } |