import { UploadFile } from 'antd'; export const transformFile2Base64 = (val: any): Promise => { 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 fileList[0].thumbUrl; TODO: Even JPG files will be converted to base64 parameters in png format } 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); };