| import { UploadFile } from 'antd'; |
|
|
| export const transformFile2Base64 = (val: any): Promise<any> => { |
| return new Promise((resolve, reject) => { |
| const reader = new FileReader(); |
| reader.readAsDataURL(val); |
| reader.onload = (): void => { |
| resolve(reader.result); |
| }; |
| reader.onerror = reject; |
| }); |
| }; |
|
|
| export const transformBase64ToFile = ( |
| dataUrl: string, |
| filename: string = 'file', |
| ) => { |
| let arr = dataUrl.split(','), |
| bstr = atob(arr[1]), |
| n = bstr.length, |
| u8arr = new Uint8Array(n); |
|
|
| const mime = arr[0].match(/:(.*?);/); |
| const mimeType = mime ? mime[1] : 'image/png'; |
|
|
| while (n--) { |
| u8arr[n] = bstr.charCodeAt(n); |
| } |
| return new File([u8arr], filename, { type: mimeType }); |
| }; |
|
|
| export const normFile = (e: any) => { |
| if (Array.isArray(e)) { |
| return e; |
| } |
| return e?.fileList; |
| }; |
|
|
| export const getUploadFileListFromBase64 = (avatar: string) => { |
| let fileList: UploadFile[] = []; |
|
|
| if (avatar) { |
| fileList = [{ uid: '1', name: 'file', thumbUrl: avatar, status: 'done' }]; |
| } |
|
|
| return fileList; |
| }; |
|
|
| export const getBase64FromUploadFileList = async (fileList?: UploadFile[]) => { |
| if (Array.isArray(fileList) && fileList.length > 0) { |
| const file = fileList[0]; |
| const originFileObj = file.originFileObj; |
| if (originFileObj) { |
| const base64 = await transformFile2Base64(originFileObj); |
| return base64; |
| } else { |
| return file.thumbUrl; |
| } |
| |
| } |
|
|
| return ''; |
| }; |
|
|
| export const downloadFile = ({ |
| url, |
| filename, |
| target, |
| }: { |
| url: string; |
| filename?: string; |
| target?: string; |
| }) => { |
| const downloadElement = document.createElement('a'); |
| downloadElement.style.display = 'none'; |
| downloadElement.href = url; |
| if (target) { |
| downloadElement.target = '_blank'; |
| } |
| downloadElement.rel = 'noopener noreferrer'; |
| if (filename) { |
| downloadElement.download = filename; |
| } |
| document.body.appendChild(downloadElement); |
| downloadElement.click(); |
| document.body.removeChild(downloadElement); |
| }; |
|
|
| const Units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; |
|
|
| export const formatBytes = (x: string | number) => { |
| let l = 0, |
| n = (typeof x === 'string' ? parseInt(x, 10) : x) || 0; |
|
|
| while (n >= 1024 && ++l) { |
| n = n / 1024; |
| } |
|
|
| return n.toFixed(n < 10 && l > 0 ? 1 : 0) + ' ' + Units[l]; |
| }; |
|
|