Oss 对象服务存储前端方法封装

1、根据oss url 获取文件数据流

/**
 * @description 获取文件数据流
 * @author easten
 * @date 2020-07-16
 * @export
 * @param {*} files 文件列表
 * @returns 文件数据流对象
 */
export function getFileStream(files) {
  return new Promise(resolve => {
    if (files.length > 0) {
      let data = [];
      files.forEach(item => {
        ossRepository
          .download(getFileUrl(item.url), p => {})
          .then(res => {
            data.push({
              name: `${item.name}${item.type}`,
              blob: res,
            });
            if (data.length == files.length) {
              resolve(data);
            }
          });
      });
    }
  });
}

2、文件单个/多个下载

export function fileDownload(files) {
  if (files instanceof Array) {
    // 多文件打包下载
    getFileStream(files).then(datas => {
      // 拼装压缩包格式
      if (datas.length > 0) {
        SaveMultipleFile(`附件.zip`, datas).then(() => {
          console.log('下载成功');
        });
      }
    });
  } else {
    // 单文件下载
    ossRepository
      .download(getFileUrl(files.url), progress => {})
      .then(blob => {
        SaveSingleFile(`${files.name}${files.type}`, files.size, blob).then(a => {
          console.log('下载成功');
        });
      });
  }
}

/**
 * @description 批量下载
 * @author easten
 * @date 2020-07-13
 * @export
 * @param {*} zipName 压缩包名称
 * @param {*} files 需要压缩的文件信息
 */
export function SaveMultipleFile(zipName, files) {
  return new Promise((resolve,error) => {
    // 首先定义一个文件夹
    let zip=new JSZIP();
    files.forEach(a=>{
      zip.file(a.name,a.blob);
    });
    zip.generateAsync({type:"blob"})
    .then(function(content) {
        saveAs(content, zipName);
        resolve();
    }).catch(()=>{
      error();
    });
  });
}

3、常用的文件类型

export let resourceIcon = {
  folder: 'folder-open',
  xls: 'file-excel',
  xlsx: 'file-excel',
  md: 'file-markdown',
  pdf: 'file-pdf',
  ppt: 'file-ppt',
  txt: 'file-text',
  doc: 'file-word',
  unknown: 'file-unknown',
  zip: 'file-zip',
  other: 'file',
  jpg: 'file-image',
};

// 创建文件格式对应表
export const FileTypes = [
  { k: 'audio/3gpp', v: '3gpp' },
  { k: 'video/3gpp', v: '3gpp' },
  { k: 'audio/ac3', v: 'ac3' },
  { k: 'allpication/vnd.ms-asf', v: 'asf' },
  { k: 'audio/basic', v: 'au' },
  { k: 'text/css', v: 'css' },
  { k: 'text/csv', v: 'csv' },
  { k: 'application/msword ', v: 'dot' },
  { k: 'application/xml-dtd', v: 'dtd' },
  { k: 'image/vnd.dwg', v: 'dwg' },
  { k: 'image/vnd.dxf', v: 'dxf' },
  { k: 'image/gif', v: 'gif' },
  { k: 'text/htm', v: 'htm' },
  { k: 'text/html', v: 'html' },
  { k: 'image/jp2', v: 'jp2' },
  { k: 'image/jpeg', v: 'jpeg' },
  { k: 'text/javascript', v: 'js' },
  { k: 'application/javascript', v: 'js' },
  { k: 'application/json', v: 'json' },
  { k: 'audio/mpeg', v: 'mp2' },
  { k: 'audio/mp4', v: 'mp4' },
  { k: 'video/mpeg', v: 'mpeg' },
  { k: 'application/vnd.ms-project', v: 'mpp' },
  { k: 'application/ogg', v: 'ogg' },
  { k: 'audio/ogg', v: 'ogg' },
  { k: 'application/pdf', v: 'pdf' },
  { k: 'image/png', v: 'png' },
  { k: 'application/vnd.ms-powerpoint', v: 'ppt' },
  { k: 'application/rtf', v: 'rtf' },
  { k: 'text/rtf', v: 'rtf' },
  { k: 'image/vnd.svf', v: 'svf' },
  { k: 'image/tiff', v: 'tif' },
  { k: 'text/plain', v: 'txt' },
  { k: 'application/vnd.ms-works', v: 'wdb' },
  { k: 'text/xml', v: 'xml' },
  { k: 'application/xhtml+xml', v: 'xhtml' },
  { k: 'application/xml', v: 'xml' },
  { k: 'application/vnd.ms-excel', v: 'xls' },
  { k: 'aplication/zip', v: 'zip' },
  { k: 'pplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet', v: 'xlsx' },
];

4、文件大小转换

/**
 * @description 文件大小转换
 * @author easten
 * @date 2020-07-08
 * @export
 * @param {*} fileSize
 * @returns kb GB  G
 */
export function FileSizeTrans(fileSize) {
  let size = '';
  if (fileSize < 0.1 * 1024) {
    //如果小于0.1KB转化成B
    size = fileSize.toFixed(2) + 'B';
  } else if (fileSize < 0.1 * 1024 * 1024) {
    //如果小于0.1MB转化成KB
    size = (fileSize / 1024).toFixed(2) + 'KB';
  } else if (fileSize < 0.1 * 1024 * 1024 * 1024) {
    //如果小于0.1GB转化成MB
    size = (fileSize / (1024 * 1024)).toFixed(2) + 'MB';
  } else {
    //其他转化成GB
    size = (fileSize / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
  }
(0)

相关推荐