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 = https://www.cnblogs.com/dongteng/p/[];
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';
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/202450.html
標籤:JavaScript
上一篇:Vue3.x 從零開始(五)—— Router + Vuex + TypeScript 實戰演練(上)
下一篇:前端PDF檔案轉圖片方法
