/** * 获取文件名和后缀 * @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; };