You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

fileUtil.ts 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { UploadFile } from 'antd';
  2. export const transformFile2Base64 = (val: any): Promise<any> => {
  3. return new Promise((resolve, reject) => {
  4. const reader = new FileReader();
  5. reader.readAsDataURL(val);
  6. reader.onload = (): void => {
  7. resolve(reader.result);
  8. };
  9. reader.onerror = reject;
  10. });
  11. };
  12. export const transformBase64ToFile = (
  13. dataUrl: string,
  14. filename: string = 'file',
  15. ) => {
  16. let arr = dataUrl.split(','),
  17. bstr = atob(arr[1]),
  18. n = bstr.length,
  19. u8arr = new Uint8Array(n);
  20. const mime = arr[0].match(/:(.*?);/);
  21. const mimeType = mime ? mime[1] : 'image/png';
  22. while (n--) {
  23. u8arr[n] = bstr.charCodeAt(n);
  24. }
  25. return new File([u8arr], filename, { type: mimeType });
  26. };
  27. export const normFile = (e: any) => {
  28. if (Array.isArray(e)) {
  29. return e;
  30. }
  31. return e?.fileList;
  32. };
  33. export const getUploadFileListFromBase64 = (avatar: string) => {
  34. let fileList: UploadFile[] = [];
  35. if (avatar) {
  36. fileList = [{ uid: '1', name: 'file', thumbUrl: avatar, status: 'done' }];
  37. }
  38. return fileList;
  39. };
  40. export const getBase64FromUploadFileList = async (fileList?: UploadFile[]) => {
  41. if (Array.isArray(fileList) && fileList.length > 0) {
  42. const file = fileList[0];
  43. const originFileObj = file.originFileObj;
  44. if (originFileObj) {
  45. const base64 = await transformFile2Base64(originFileObj);
  46. return base64;
  47. } else {
  48. return file.thumbUrl;
  49. }
  50. // return fileList[0].thumbUrl; TODO: Even JPG files will be converted to base64 parameters in png format
  51. }
  52. return '';
  53. };
  54. export const downloadFile = ({
  55. url,
  56. filename,
  57. target,
  58. }: {
  59. url: string;
  60. filename?: string;
  61. target?: string;
  62. }) => {
  63. const downloadElement = document.createElement('a');
  64. downloadElement.style.display = 'none';
  65. downloadElement.href = url;
  66. if (target) {
  67. downloadElement.target = '_blank';
  68. }
  69. downloadElement.rel = 'noopener noreferrer';
  70. if (filename) {
  71. downloadElement.download = filename;
  72. }
  73. document.body.appendChild(downloadElement);
  74. downloadElement.click();
  75. document.body.removeChild(downloadElement);
  76. };