skyouc
2024-12-21 c9c263dc43ad90f95f24a036cee9e6b47afb596c
uni_modules/uni-file-picker/components/uni-file-picker/utils.js
@@ -1,109 +1,109 @@
/**
 * 获取文件名和后缀
 * @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
}
/**
 * 获取文件名和后缀
 * @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
}