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

  • A+
所属分类:Web前端

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';   }