/** * 获取文件名和后缀 * @param {String} name */ export const get_file_ext = (name) => { const last_len = name.lastIndexOf('.') const len = name.length return { name: name.substring(0, last_len), ext: name.substring(last_len + 1, len) } } /** * 获取扩展名 * @param {Array} fileExtname */ export const get_extname = (fileExtname) => { if (!Array.isArray(fileExtname)) { let extname = fileExtname.replace(/(\[|\])/g, '') return extname.split(',') } else { return fileExtname } return [] } /** * 获取文件和检测是否可选 */ export const get_files_and_is_max = (res, _extname) => { let filePaths = [] let files = [] if(!_extname || _extname.length === 0){ return { filePaths, files } } res.tempFiles.forEach(v => { let fileFullName = get_file_ext(v.name) const extname = fileFullName.ext.toLowerCase() if (_extname.indexOf(extname) !== -1) { files.push(v) filePaths.push(v.path) } }) if (files.length !== res.tempFiles.length) { uni.showToast({ title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, icon: 'none', duration: 5000 }) } return { filePaths, files } } /** * 获取图片信息 * @param {Object} filepath */ export const get_file_info = (filepath) => { return new Promise((resolve, reject) => { uni.getImageInfo({ src: filepath, success(res) { resolve(res) }, fail(err) { reject(err) } }) }) } /** * 获取封装数据 */ export const get_file_data = async (files, type = 'image') => { // 最终需要上传数据库的数据 let fileFullName = get_file_ext(files.name) const extname = fileFullName.ext.toLowerCase() let filedata = { name: files.name, uuid: files.uuid, extname: extname || '', cloudPath: files.cloudPath, fileType: files.fileType, url: files.path || files.path, size: files.size, //单位是字节 image: {}, path: files.path, video: {} } if (type === 'image') { const imageinfo = await get_file_info(files.path) delete filedata.video filedata.image.width = imageinfo.width filedata.image.height = imageinfo.height filedata.image.location = imageinfo.path } else { delete filedata.image } return filedata }